栈的基本操作(C/C++)
生活随笔
收集整理的這篇文章主要介紹了
栈的基本操作(C/C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、棧的定義
- 二、順序棧
- 三、兩棧共享空間
- 四、鏈棧
- 總結
前言
提示:以下是本篇文章正文內容
一、棧的定義
棧(Stack)是受操作限制的線性表,插入和刪除數據元素的操作只能在線性表的一段進行。
棧一般有棧底和棧頂,stack是限定僅在表尾進行插入和刪除操作的線性表,允許插入和刪除的一端稱為棧頂,另一端稱為棧底
棧又稱為后進先出的線性表,簡稱LIFO結構
棧的插入操作,為壓棧、入棧;棧的刪除操作,為出棧
入棧(Push)
數據元素進入棧內
出棧(Pop)
棧內元素從棧頂彈出
二、順序棧
順序棧:棧的順序存儲結構
順序棧是用數組來實現的,并將下標位0的作為棧底
附設指針top指示棧頂元素在數組中的位置
順序棧的結構
進棧操作
/*進棧操作 插入元素e為新的棧頂元素*/ Status Push(SqStack *S,SElemType e) {if(S->top == MAXSIZE -1) /*棧滿*/{return ERROR;}S->top++; /*棧頂指針增加一*/S->data[S->top] = e; /*將新插入元素賦值給棧頂空間*/return OK; }出棧操作
/*出棧操作:若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR*/ Status Pop(SqStack *S,SElemType *e) {if(S->top == -1)return ERROR;*e=S->data[S->top]; /*將要刪除的棧頂元素賦值給e*/S->top--; /*棧頂指針減一*/return OK; }三、兩棧共享空間
對于相同數據類型的棧,可以用一個數組來存儲,讓一個棧的棧底為數組的始端,即下標為0處,另一個棧的棧底為數組的末端,即下標為數組長度n-1處。兩個棧如果增加元素,就是兩端點向中間延伸。
top1和top2分別為兩個棧的棧頂指針
top1+1=top2(棧滿);棧1為空棧,top1=-1;棧2為空棧,top2=n;
共享棧結構
入棧操作
這里要判斷是棧1還是棧2的棧號參數stacklNumber
出棧操作
/*若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERROR*/ Status Pop(SqDoubleStack *S,SElemType *e, int stackNumber) {if (stackNumber == 1) {if (S->top1 == -1) /*空棧,溢出*/return ERROR;*e = S->data[S->top1--]; /*棧1的棧頂元素出棧*/}if (stackNumber == 2){if(S->top2==MAXSIZE) /*空棧,溢出*/return ERROR;*e = S->data[S->top2++]; /*棧2的棧頂元素出棧*/} }四、鏈棧
鏈棧:棧的鏈接存儲結構
將單鏈表的頭部作為棧頂,鏈棧不需要附設頭節點
鏈棧的結構
進棧操作
//進棧操作:單鏈表有頭指針,而棧頂指針也是必須的,因此把棧頂放在單鏈表的頭部 //(頭結點->棧頂):相當于頭插法;插入新元素e為新的棧頂元素 Status Push(LinkStack *S,SElemType e) {LinkStackPtr s=(LinkStackPtr) malloc(sizeof(StackNode)); /*聲明新結點*/s->data = e;s->next = S->top; /*把當前的棧頂元素賦值給新結點的直接后繼*/S->top = s; /*將新的結點s賦值給棧頂指針*/S->count++;return OK; }出棧操作
/*出棧操作:用p存儲被刪除的棧頂結點,將棧頂指針下移一位,最后釋放p*/ #include <stdbool.h> bool StackEmpty(LinkStack S) {if(S.top ==NULL) /*如果是空棧,則top為*/return TRUE; } Status Pop(LinkStack *S,SElemType *e) {LinkStackPtr p;if (StackEmpty(*S))return ERROR;*e = S->top->data;p = S->top;S->top = S->top->next;free(p);S->count--;return OK; }總結
提示:這里對文章進行總結:
如果棧的使用過程中元素變化不可預料,有時小,有時大,建議用鏈棧,反之,如果它的變化在可控范圍內,建議用順序棧。
總結
以上是生活随笔為你收集整理的栈的基本操作(C/C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JSONObject中optString
- 下一篇: sed和vim练习