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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用c语言写一个栈

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


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

棧的基本運算

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

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

    順序棧的定義和順序表的定義一樣,通常使用結構體定義順序棧,記錄棧頂坐標,從而操作棧實現各種功能

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

    注意:

    (1)棧底位置是固定不變的,可設置在棧的任意一個端點。
    (2)棧頂位置是隨著進棧和出棧的操作而變化的,用一個整型量top(通常稱top為棧頂指針)來指示當前棧頂的位置。

    鏈式棧

    棧的鏈式存儲結構稱為鏈棧。鏈棧是沒有附加頭結點的運算受限的單鏈表。棧頂指針就是鏈表的頭指針。跟單鏈表一樣,通常使用結構體實現鏈式棧的功能,結構體內一個量存儲結點值,一個量存儲指針,實現鏈式結構。就像單鏈表有頭指針一樣,也為鏈式棧定義頭結點,以便對鏈式棧進行操作。

    typedef struct stacknode//鏈式棧表結構 {char date;struct stacknode *next;//棧元素指針 }StackNode; typedef struct {stackNode *top;//棧頂指針 }linkStack;

    代碼走起:

    #include <stdio.h> #include <stdlib.h>#define len sizeof(node)//申請空間大小 //定義棧結構的結點 typedef struct stack_node {char element;struct stack_node *next; } node;typedef struct {node *top; } stack;//進棧函數 void push(stack *sp, char element) {node *np;//創建新節點np = (node *)malloc(len);np->element = element;//修改棧頂指針np->next = sp->top;sp->top = np; }//出棧函數 char pop(stack *sp) {node *np;//將要出棧的結點指針np = sp->top;char c;//棧頂元素值c = np->element;sp->top = np->next;free(np);np = NULL;return c; }//遍歷輸出函數 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; }

    希望對大家有幫助哦
    ![

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。