用c语言写一个栈
棧
**棧( 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í)際使用過程中,常用的棧的操作如下。
(2) StackEmpty(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)綏6x頭結(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ì)大家有幫助哦

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