日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用c语言写一个栈

發(fā)布時(shí)間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用c语言写一个栈 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


**棧( stack)是一種重要的線性結(jié)構(gòu),它是受限的線性表,是僅能在表的一端進(jìn)行插入和刪除運(yùn)算的線性表,棧被廣泛的運(yùn)用到各種系統(tǒng)的程序設(shè)計(jì)中。
**
(1)通常稱插入、刪除的一端為棧頂,另一端稱為棧底。
(2)當(dāng)表中沒有元素時(shí)稱為空棧。
(3)棧為后進(jìn)先出的線性表。
棧的修改是按熙后進(jìn)先出的原則進(jìn)行。每次刪除(退棧)的總是當(dāng)前棧中“最新”的元素,即最后插入(進(jìn)棧)的元素,而最先插入的則是被放在棧的底部,要到最后才能刪除。

棧的基本運(yùn)算

在實(shí)際使用過程中,常用的棧的操作如下。

  • InitStack(S):構(gòu)造一個(gè)空棧S。
    (2) StackEmpty(S):判斷是否為空棧。若S為空棧,則返回TRUE,香則返回 FALSE
  • Stack Ful(S):判斷是否為滿棧。若S為滿棧,則返回TRUE,否則返回 FALSE。
    4)push(S,x):進(jìn)棧,若棧S不滿,則將元素x插入S的的棧頂。
    5)pop(S):出棧。若棧S非空,則將S的棧頂元素刪去,并返回元素。
    (6) Stack Top(S):取棧頂元素。若棧S非空,則返回棧頂元素,但不改變棧的狀態(tài)
  • 順序棧的定義

    順序棧的定義和順序表的定義一樣,通常使用結(jié)構(gòu)體定義順序棧,記錄棧頂坐標(biāo),從而操作棧實(shí)現(xiàn)各種功能

    #define Stacksize 100 //假設(shè)與分配的棧空間最多為100個(gè)元素 typedef struct {char date[Stacksize];//假設(shè)棧元素的數(shù)據(jù)類型為字符int top;//定義棧頂 }Seqstack;

    注意:

    (1)棧底位置是固定不變的,可設(shè)置在棧的任意一個(gè)端點(diǎn)。
    (2)棧頂位置是隨著進(jìn)棧和出棧的操作而變化的,用一個(gè)整型量top(通常稱top為棧頂指針)來指示當(dāng)前棧頂?shù)奈恢谩?br />

    鏈?zhǔn)綏?/h2>

    棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)稱為鏈棧。鏈棧是沒有附加頭結(jié)點(diǎn)的運(yùn)算受限的單鏈表。棧頂指針就是鏈表的頭指針。跟單鏈表一樣,通常使用結(jié)構(gòu)體實(shí)現(xiàn)鏈?zhǔn)綏5墓δ?結(jié)構(gòu)體內(nèi)一個(gè)量存儲(chǔ)結(jié)點(diǎn)值,一個(gè)量存儲(chǔ)指針,實(shí)現(xiàn)鏈?zhǔn)浇Y(jié)構(gòu)。就像單鏈表有頭指針一樣,也為鏈?zhǔn)綏6x頭結(jié)點(diǎn),以便對(duì)鏈?zhǔn)綏_M(jìn)行操作。

    typedef struct stacknode//鏈?zhǔn)綏1斫Y(jié)構(gòu) {char date;struct stacknode *next;//棧元素指針 }StackNode; typedef struct {stackNode *top;//棧頂指針 }linkStack;

    代碼走起:

    #include <stdio.h> #include <stdlib.h>#define len sizeof(node)//申請(qǐng)空間大小 //定義棧結(jié)構(gòu)的結(jié)點(diǎn) typedef struct stack_node {char element;struct stack_node *next; } node;typedef struct {node *top; } stack;//進(jìn)棧函數(shù) void push(stack *sp, char element) {node *np;//創(chuàng)建新節(jié)點(diǎn)np = (node *)malloc(len);np->element = element;//修改棧頂指針np->next = sp->top;sp->top = np; }//出棧函數(shù) char pop(stack *sp) {node *np;//將要出棧的結(jié)點(diǎn)指針np = sp->top;char c;//棧頂元素值c = np->element;sp->top = np->next;free(np);np = NULL;return c; }//遍歷輸出函數(shù) void read (stack sp) {stack temstack = {NULL};char tem;while (sp.top != NULL) {tem = pop(&sp);printf("%c\n", tem);push(&temstack, tem);}while (temstack.top != NULL) {tem = pop(&temstack);push(&sp, tem);} } int main() {stack s = {NULL};push(&s, 'a');push(&s, 'b');push(&s, 'c');read(s);return 0; }

    希望對(duì)大家有幫助哦
    ![

  • 在這里插入圖片描述
  • ](https://img-blog.csdnimg.cn/20210118165831285.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5ODM4NjA3,size_16,color_FFFFFF,t_70)

    總結(jié)

    以上是生活随笔為你收集整理的用c语言写一个栈的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。