1. 程式人生 > >棧的建立、返回棧頂元素、刪除棧頂元素、插入棧頂元素

棧的建立、返回棧頂元素、刪除棧頂元素、插入棧頂元素

#include <stdio.h>

#include <stdlib.h>

#define STACK_INIT_SIZE 100//初始容量

#define STACKINCREMENT 10//每次增加的容量

typedef struct

{

    int *base;//棧底指標

    int *top;//棧頂指標

    int stacksize;//棧容量

}Sqstack;

int InitStack(Sqstack *L)//建立空棧

{

    L->base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));//分配基址

    if(!L->base)

        exit(0);//儲存分配失敗

    L->top=L->base;//空棧

    L->stacksize=STACK_INIT_SIZE;//初始容量

    return 1;

}

void GetStack(Sqstack *L)//返回棧頂元素

{

    int e;

    if(L->top==L->base)//棧空

    {

        printf("棧空,無法返回.\n");

        exit(0);

    }

    else

    {

        e=*(L->top-1);//棧頂指標的前一個位置即為棧頂元素

        printf("棧頂資料為:

%d\n",e);

    }

}

void Push(Sqstack *L)//插入棧頂元素

{

    printf("請輸入插入的資料shu");

    int e;

    scanf("%d",&e);

    if(L->top - L->base>=L->stacksize)//棧滿

    {

        L->base=(int *)realloc(L->base,(L->stacksize+STACKINCREMENT)*sizeof(int));//增加容量

        if(!L->base)

            exit(0);//儲存分配失敗

        L->top=L->base+L->stacksize;//更新棧頂指標

        L->stacksize+=STACKINCREMENT;//更新棧容量

    }

    *L->top++=e;//棧頂資料變為e

}

void Pop(Sqstack *L)//刪除棧頂元素

{

    int e;

    if(L->top==L->base)//棧空

    {

        printf("刪除有誤.\n");

        exit(0);

    }

    else

    {

        e=*--L->top;

        printf("刪除資料為:%d\n",e);

    }

}

void ShowStack(Sqstack *L)//顯示棧

{

    printf("棧:");

    int *p;

    p=L->base;

    while(p!=L->top)

    {

        printf("%d ",*p++);

    }

    printf("\n");

}

int main()

{

    printf("先構造一個空棧.\n");

    Sqstack L;

    InitStack(&L);

    printf("%s",InitStack(&L)?"建立成功.\n":"建立失敗.\n");

    while(1)

    {

        printf("你可以進行的操作:\n");

        printf("1:返回棧頂元素    2:插入棧頂元素    3:刪除棧頂元素   0:退出\n");

        printf("請輸入你的選擇:");

        int xuan;

        scanf("%d",&xuan);

        if(xuan==0)

            break;

        if(xuan==1)

        {

            GetStack(&L);

            ShowStack(&L);

        }

        if(xuan==2)

        {

            Push(&L);

            ShowStack(&L);

        }

        if(xuan==3)

        {

            Pop(&L);

            ShowStack(&L);

        }

    }

    return 0;

}



相關推薦

建立返回元素刪除元素插入元素

#include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100//初始容量 #define STACKINCREMENT 10//每次增加的容量 typedef struct {

實現一個,要求實現出返回最小值的時間複雜度為O(1)

  由棧的一些基本操作,很容易使出棧和入棧的時間複雜度為O(1),但是由於入棧資料元素順序不一定是有序的,故不能直接實現返回最小值的時間複雜度為O(1)。下面提供兩種方法: (一)設定一個特殊的資料結構型別,包括兩個棧_data棧和_mindata棧,_data棧和原來的棧

的置空入,出,和返回元素操作

#include "stdio.h" #include "stdlib.h" #define N sizeof(struct stack) typedef struct stack{int data;struct stack *next; }*pstack; //置空鏈棧

python全脫產第34天------開啟進程的兩種方式join方法進程對象其他相關的屬性和方法僵屍進程孤兒進程守護進程互斥鎖

for roc -- don 操作 windows main 周期 僵屍 一、開啟進程的兩種方式   方式一: from multiprocessing import Processimport timedef task(name): print(‘%s is run

python全脫產第37天------進程池與線程池協程gevent模塊單線程下實現並發的套接字通信

rt thread adp targe rec 並發 urn pat return nco 一、進程池與線程池   調用concurrent.futures下的ThreadPoolExecutor,ProcessPoolExecutor來實現   提交任務有兩種方式:同步調

“全2019”Java第三十九章:構造函數構造方法構造器

語言 tel https 全棧 工程師 alt 頭條 時間 公眾 難度 初級 學習時間 10分鐘 適合人群 零基礎 開發語言 Java 開發環境 JDK v11 IntelliJ IDEA v2018.3 文章原文鏈接 “全棧2019”Java第三十九章:構造函數、構造

【劍指offer】包含min函式的,可以返回中的最小元素

題目要求 包含min函式的棧 定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式 (時間複雜度應為O(1))。 核心思想 棧的特性是先進後出,而不能從任意位置出棧,因此一個棧無法實現。只能通過建立輔助棧來實現。用輔助棧來儲存棧的最小

Python全學習筆記day 27: isinstance和issubclass反射類的內建方法(__str__和__repr____del____call__)

一、isinstance和issubclass isinstance(obj,cls)檢查是否obj是否是類 cls 的物件 class Foo(object): pass obj = Foo() print(isinstance(obj, Foo))

二叉樹的四種遍歷方式:遞迴非遞迴+Morris(後序非遞迴還有一種單和雙的不同版本)

本文參考: 參考文章1 參考文章2 程式碼中加入了一些自己的理解 /* 二叉樹的四種遍歷方式 */ #include <iostream> #include <stack> using namespace std; // 二叉樹

jquery中獲取相鄰元素相關的命令:next()prev()和siblings()

cnblogs lin Language javascrip prev round blog scrip color jquery裏我們要獲取某個元素的相鄰元素時,可以用到的命令有三個: next():用來獲取下一個同輩元素。 prev():用來獲取上一個同輩元素。 sib

轉 linux shell自定義函數(定義返回變量作用域)介紹

shel 自己 lai cell define ber article clas ner linux shell 可以用戶定義函數,然後在shell腳本中可以隨便調用。下面說說它的定義方法,以及調用需要註意那些事項。 一、定義shell函數(define function)

javascript學習筆記(二):定義函數調用函數參數返回局部和全局變量

兩個 cnblogs bsp 結果 value ava ase com 調用 定義函數、調用函數、參數、返回值 關鍵字function定義函數,格式如下: function 函數名(){ 函數體 } 調用函數、參數、返回值的規則和c語言規則類似。 1 <!DOC

js獲取元素,窗口的寬度高度

獲取 order margin window document 元素 wid top borde alert($(window).height()); //瀏覽器時下窗口可視區域高度 alert($(document).height()); //瀏覽器時下窗口文檔的高度 a

Saltstack (modules返回值cachesyndicsalt-sshAPI)

saltstack modules、返回值cache、syndic\salt-ssh、api接上篇內容redhat6.5server1 172.25.29.1 salt-master server2 172.25.29.2 salt-minion server3 172.25.29.3 salt-mini

pycahrm使用docstrings來指定變量類型返回值類型函數參數類型

col 函數 很快 裏的 大量 代碼補全 nic sss def py裏面不需要顯示聲明類型,這和java c這些靜態語言不同,雖然python這樣做少了一些代碼和寫代碼的困難度,但還是非常多的弊端的,運行速度 代碼安全, 這些都是語言本身帶來的本的弊端,這些沒辦法沒辦法彌

python isinstance函數 判斷元素是否是字符串int型float型

text font body 內建函數 gpo 1.0 sta 允許 表示 isinstance是Python中的一個內建函數 語法: isinstance(object, classinfo) 如果參數object是classinfo的實例,或者object是cl

SpringMVC返回JSON數據以及文件上傳過濾靜態資源

SpringMVC 文件上傳 返回JSON數據 過濾靜態資源 返回JSON數據 在如今前後端分離的趨勢下,後端基本不需要再去關心前端頁面的事情,只需要把數據處理好並通過相應的接口返回數據給前端即可。在SpringMVC中,我們可以通過@ResponseBody註解來返回JSON數據或者是XML

python3 isinstance()判斷元素是否是字符串int型float型

text false 例如 其他 語法 pan pre div 一個 python3 isinstance()判斷元素是否是字符串、int型、float型 isinstance是Python中的一個內建函數 語法: isinstance(object, classinfo

javaSE引數傳遞問題返回值問題內部類總結

 思維導圖  引數值傳遞問題 之前我們見到方法傳參一般傳遞的都是基本資料型別的引數,比如我要一個int型別,只需要在呼叫方法的時候傳一個int型別的數值就好了。但是當傳入引數需要一個引用資料型別,那麼該如何考慮呢? 類名作為傳入引數 class Studen

Python 函式。函式的定義。函式的引數返回值。函式巢狀

  demo.py(函式定義): # say_hello() # 不能在定義函式之前呼叫函式 # Python 直譯器知道下方定義了一個函式 def say_hello(): """函式的說明文件""" print("hello 1") print("