標籤:資料結構 底層開發 鏈棧 動態棧
棧屬於資料結構,它本質上屬於線性表,只是受限的線性表。
我們今天來討論下動態棧也就是鏈棧的相關問題。
# 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 pS){pS->pTop = (PNODE)malloc(sizeof(NODE));if(NULL == pS->pTop){printf("ERROR \n");exit(-1);}else{pS->pBottom = pS->pTop;pS->pBottom->pNext = NULL;//pS->pTop->pNext = NULL;}}//遍曆棧void TraverseStack(PSTACK pS){printf("Now start traverse the stack elem : ");PNODE p = pS->pTop;while(p != pS->pBottom){printf("%d ", p->data);p = p->pNext;}printf("\n");}//壓棧void PushStack(PSTACK pS, int Val){PNODE pNew = (PNODE)malloc(sizeof(NODE));pNew->data = Val;pNew->pNext = pS->pTop;pS->pTop = pNew; }//判斷棧空bool IsEmptyStack(PSTACK pS){if(pS->pTop == pS->pBottom){return true;}else{return false;}}//出棧int PopStack(PSTACK pS, int * pVal){if(IsEmptyStack(pS)){printf("ERROR stack is empty \n");exit(-1);}else{PNODE r = pS->pTop;*pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;}return true;}//清空棧void ClearStack(PSTACK pS){printf("Now start clear the stack ... ");if(IsEmptyStack(pS)){return ;}PNODE p = pS->pTop;PNODE q = NULL;while(p != pS->pBottom){q = p->pNext;free(p);p = q;}pS->pTop = pS->pBottom;puts("\n");}//主程式int main(void){STACK S;InitStack(&S);//造成一個空棧//壓棧PushStack(&S, 1);PushStack(&S, 2);PushStack(&S, 3);PushStack(&S, 4);//遍曆TraverseStack(&S);//彈出棧頂元素int val = 0;if(PopStack(&S, &val)){printf("pop stack top elem is %d \n\n", val);}//遍曆TraverseStack(&S);//清空棧ClearStack(&S);//遍曆TraverseStack(&S);return 0;}
本文出自 “享受科技帶來的快樂” 部落格,請務必保留此出處http://liam2199.blog.51cto.com/2879872/1532114