一個數組實現兩個棧(共享棧)
阿新 • • 發佈:2018-12-23
用一個數組來實現兩個棧,陣列的頭和尾分別為兩個棧底。入棧的時候將資料分別從陣列的頭尾向中間存放。
當棧頂1在棧頂2右邊的時候說明棧已滿。因為要實現兩個棧,我們可以定義一個變數,來判斷我們對哪一個棧來進行操作。
結構體定義以及函式宣告部分:
#define MAX 10 typedef int DataType; typedef struct Stack { DataType* _array; size_t _top1; size_t _top2;//棧頂 }Stack; void StackInit(Stack* s);//初始化 int isfull(Stack *s);//判斷棧是否滿 void StackPush(Stack* s, DataType x,int n);//入棧 int isEmpty(Stack*s, int n);//判斷是否為空 void StackPop(Stack* s,int n);//出棧
函式實現:
void StackInit(Stack* s) { s->_array = (DataType*)malloc(sizeof(DataType)*MAX); assert(s->_array); s->_top1 = 0; s->_top2 = MAX - 1; } int isfull(Stack *s) { assert(s); if (s->_top1 <= s->_top2) return 0; else return 1; } void StackPush(Stack* s, DataType x, int n) { assert(s); if (isfull(s) == 1) { printf("stack is full!\n"); return; } if (n) { s->_array[s->_top1] = x; s->_top1++; } else { s->_array[s->_top2] = x; s->_top2--; } } int isEmpty(Stack*s, int n) { assert(s); if (n) { if (s->_top1 == 0) return 1; else return 0; } else { if (s->_top2 == MAX - 1) return 1; else return 0; } } void StackPop(Stack* s, int n) { assert(s); if (isEmpty(s) == 1) { printf("stack is empty!\n"); return; } if (n) { s->_top1--; } else { s->_top2++; } }