標籤:資料結構 棧
棧
棧類似於箱子。
靜態棧、動態棧。
關於棧的操作
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct Node{int data;struct Node *pNext;}NODE, *PNODE;typedef struct Stack{PNODE pTop;PNODE pBottom;}STACK, *PSTACK;void init(PSTACK);void push(PSTACK, int);void traverse(PSTACK);bool empty(PSTACK);bool pop(PSTACK, int *);void clear(PSTACK p);int main(void){STACK s;int val;init(&s);push(&s, 1);push(&s, 2);push(&s, 3);push(&s, 4);push(&s, 5);push(&s, 6);push(&s, 7);traverse(&s);if(pop(&s, &val)){printf("出棧成功,出棧的元素是 %d \n", val);}else{printf("出棧失敗\n");}traverse(&s);clear(&s);if(pop(&s, &val)){printf("出棧成功,出棧的元素是 %d \n", val);}else{printf("出棧失敗\n");}return 0;}//完成一個棧的初始化void init(PSTACK p){p->pTop = (PNODE)malloc(sizeof(NODE));if(NULL == p->pTop){printf("動態記憶體分配失敗\n");exit(-1);}else{p->pBottom = p->pTop;p->pTop->pNext = NULL;}}void push(PSTACK p, int val){PNODE pNew = (PNODE)malloc(sizeof(NODE));pNew->data = val;pNew->pNext = p->pTop;p->pTop = pNew;}void traverse(PSTACK p){PNODE r = p->pTop;while(r != p->pBottom){printf("%d ", r->data);r = r->pNext;}printf("\n");return;}bool empty(PSTACK p){if(p->pTop == p->pBottom)return true;elsereturn false;}//把p所指向的棧出棧一次,並把出棧的元素存入pval形參所指的變數中bool pop(PSTACK p, int * pval){if(empty(p)){return false;}else{PNODE r = p->pTop;*pval = r->data;p->pTop = r->pNext;free(r);r = NULL;return true;}}void clear(PSTACK p){if(empty(p)){return;}else{PNODE r = p->pTop;PNODE t = NULL;while(r != p->pBottom){t = r->pNext;free(r);r = t;}p->pTop = p->pBottom;}}
棧主要用於運算式求值,緩衝處理,迷宮,函數調用,中斷...
(郝斌講學)資料結構學習篇(四)---棧的CRUD操作