用c语言写一个栈
棧
**棧( stack)是一種重要的線性結構,它是受限的線性表,是僅能在表的一端進行插入和刪除運算的線性表,棧被廣泛的運用到各種系統的程序設計中。
**
(1)通常稱插入、刪除的一端為棧頂,另一端稱為棧底。
(2)當表中沒有元素時稱為空棧。
(3)棧為后進先出的線性表。
棧的修改是按熙后進先出的原則進行。每次刪除(退棧)的總是當前棧中“最新”的元素,即最后插入(進棧)的元素,而最先插入的則是被放在棧的底部,要到最后才能刪除。
棧的基本運算
在實際使用過程中,常用的棧的操作如下。
(2) StackEmpty(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; }希望對大家有幫助哦

總結
- 上一篇: 日期和时间处理函数
- 下一篇: vector模板,初学者必读