3.1.3栈的链式存储 若是栈中元素的数目变化范围较大或不清楚栈元素 的数目,就应该考虑使用链式存储结构。人们将用链 式存储结构表示的栈称作“链栈”。链栈通常用一个无 头结点的单链表表示。如图3所示。 由于栈的插入删除操作只能在一端进行,而对于 单链表来说,在首端插入删除结点要比尾端相对地容 易一些,所以,我们将单链表的首端作为栈顶端,即 将单链表的头指针作为栈顶指针。 西师大学数学与信启学院
3.1.3 ᷜⱘ䫒ᓣᄬټ 㢹ᰃᷜЁܗ㋴ⱘ᭄Ⳃব࣪㣗ೈ䕗ϡ⏙Ἦᷜܗ㋴ ⱘ᭄Ⳃˈህᑨ䆹㗗㰥Փ⫼䫒ᓣᄬټ㒧ᵘDŽҎӀᇚ⫼䫒 ᓣᄬټ㒧ᵘ㸼⼎ⱘᷜ⿄³䫒ᷜ´DŽ䫒ᷜ䗮ᐌ⫼ϔϾ᮴ ༈㒧⚍ⱘऩ䫒㸼㸼⼎DŽབ3-3᠔⼎DŽ ⬅Ѣᷜⱘᦦܹߴ䰸᪡া㛑ϔッ䖯㸠ˈ㗠ᇍѢ ऩ䫒㸼ᴹ䇈ˈ佪ッᦦܹߴ䰸㒧⚍㽕↨ሒッⳌᇍഄᆍ ᯧϔѯˈ᠔ҹˈ៥Ӏᇚऩ䫒㸼ⱘ佪ッЎᷜ乊ッˈे ᇚऩ䫒㸼ⱘ༈ᣛ䩜Ўᷜ乊ᣛ䩜DŽ
top ∧ 图3-3 西师大学数学与信启学院
^ top 3-3
栈的链式存储结构在C语言中可用下列类型定义实 现 type struct node{/链栈的结点结构 Stack Entry item;/栈的数据元素类型 struct node *next;∥指向后继结点的指针 JNODE typedef struct stack NoDE top STACK 西师大学数学与信启学院
ᷜⱘ䫒ᓣᄬټ㒧ᵘC䇁㿔Ёৃ⫼ϟ߫㉏ൟᅮНᅲ ⦄˖ type struct node { //䫒ᷜⱘ㒧⚍㒧ᵘ StackEntry item; //ᷜⱘ᭄ܗ㋴㉏ൟ struct node *next; //ᣛৢ㒻㒧⚍ⱘᣛ䩜 }NODE; typedef struct stack{ NODE *top; }STACK;
下面我们将给出链栈各项基本操作的算法。 1.初始化栈S void Initstack(STACK"*S ->topNULL 西师大学数学与信启学院
ϟ䴶៥Ӏᇚ㒭ߎ䫒ᷜ乍ᴀ᪡ⱘㅫ⊩DŽ 1. ߱ྟ࣪ᷜS void InitStack(STACK *S) { S->top=NULL; }
2.入栈 void Push(staCK*S, StackEntry item P(NODE*)malloc(sizeof(nODe)) if (p)exit(OVERFLOW); elsei p->item=item; p->next=S->top S->top=p: 西师大学数学与信启学院
2. ܹᷜ void Push(STACK *S,StackEntry item) { p=(NODE*)malloc(sizeof(NODE)); if (!p) exit(OVERFLOW); else { p->item=item; p->next=S->top; S->top=p; } }