壓棧出棧遍歷棧實例代碼
#include<stdio.h>#include<stdlib.h> #include<malloc.h> typedef struct Node//定義一個鏈表結構體 { int data; struct Node* pNext; }NODE,*PNODE; typedef struct Stack//定義一個棧結構體 { PNODE pTop; PNODE pBottom; }STACK,*PSTACK; void initStack(PSTACK); void pushStack(PSTACK,int); void travelStack(PSTACK); bool popStack(PSTACK,int*); void clear(PSTACK ps); int main() { int val; STACK S;//定義一個S變量,該變量有兩個參數。一個pTop,一個pBotton initStack(&S);//初始化棧 pushStack(&S,1);//壓棧 pushStack(&S,2); pushStack(&S,3); pushStack(&S,4); pushStack(&S,5); travelStack(&S);//遍歷輸出 if(popStack(&S,&val))//判斷是否出棧成功 { printf("出棧成功,出棧元素是%d\n",val); } else { printf("出棧失敗\n"); } printf("出棧后遍歷輸出結果\n"); travelStack(&S);//遍歷輸出 clear(&S); printf("再次遍歷下面為空白,說明清空成功!\n"); travelStack(&S);//遍歷輸出 return 0; } void initStack(PSTACK ps)//初始化棧,讓棧里面的兩個元素指向一個節點。 { ps->pTop=(PNODE)malloc(sizeof(NODE)); if(NULL==ps->pTop) { printf("動態內存分配失敗\n"); exit(-1); } else { ps->pBottom=ps->pTop; ps->pTop->pNext=NULL;//等價于:ps->pBottom->pNext=NULL;也就是說下一次插入的空間是空的。也就是棧頂元素下一個是空的 } } void pushStack(PSTACK ps,int val)//壓棧函數 { PNODE pNew=(PNODE)malloc(sizeof(NODE)); pNew->data=val; pNew->pNext=ps->pTop;//每次都把元素壓到棧頂 ps->pTop=pNew; } void travelStack(PSTACK ps)//遍歷棧 { PNODE p=ps->pTop; while(p!=ps->pBottom) { printf("%d ",p->data); p=p->pNext; } printf("\n"); return ; } bool empty(PSTACK ps)//判斷棧是否為空 { if(ps->pTop==ps->pBottom) return true; else return false; } //把ps所指向的棧出棧一次,并把出棧的元素存入pVal形參所指向的變量中 //如果出棧失敗,返回false,否則,返回true bool popStack(PSTACK ps,int* pVal) { if(empty(ps)) { return false; } else { PNODE r=ps->pTop; *pVal=r->data; ps->pTop=r->pNext; free(r); r=NULL; return true; } } //最后把棧清空。 void clear(PSTACK ps) { if(empty(ps)) { return ; } else { PNODE p=ps->pTop; PNODE q=NULL; while(p!=ps->pBottom) { q=p->pNext; free(p); p=q; } ps->pTop=ps->pBottom; } } </pre>
本文由用戶 n42g 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!