栈的顺序存储结构
- 栈是限定仅在表尾进行插入和删除的线性表
- 允许插入和删除的一端叫做栈顶,另一端叫做栈底
- 不含任何元素的栈,叫空栈
- 栈是后进先出,即LIFO
- 插入的操作,叫入栈或压栈;删除的操作,叫出栈或弹栈
1 2 3 4 5 6 |
//结构 typedef struct { int data[MAXSIZE]; int top; }SqStack; |
1 2 3 4 5 6 7 8 9 |
//入栈操作 int Push(SqStack * S,ElemType e) { if(S->top == MAXSIZE-1) return 0; S->top++; S->data[S->top] = e; return 1; } |
1 2 3 4 5 6 7 8 9 |
//出栈操作 int Pop(SqStack * S,ElemType * e) { if(S->top == -1) return 0; *e = S->data[S->top]; S->top--; return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
//两栈公用空间 typedef struct { ElemType data[MAXSIZE]; int top1; int top2; }SqDoubleStack; int Push(SqDoubleStack * S,ElemType e,int stackNumber) { if(S->top1 + 1 == S->top2) return 0; if(stackNumber == 1)//栈1有元素进 S->data[++S->top1] = e; else if(stackNumber == 2) S->data[--S->top2] = e; return 0; int Pop(SqDoubleStack * S,ElemType * e,int stackNumber) { if(stackNumber == 1) { if(S->top1 == -1) return 0; *e = S->data[S->top1--]; } else if(stackNumber == 2) { if(S->top2 == MAXSIZE) return 0; *e = S->data[S->top2++]; } return 1; } |
栈的链式存储结构
1 2 3 4 5 6 7 8 9 10 11 |
//结构 typedef struct StackNode { ElemType data; struct StackNode * next; }StackNode,* LinkedStackPtr; typedef struct LinkedStack { LinkedStackPtr top; int count; }LinkedStack; |
1 2 3 4 5 6 7 8 9 |
int Push(LinkedStack * S,ElemType e) { LinkedStackPtr s = (LinkedStackPtr)malloc(sizeof(StackNode)); s->data = e; s->next = S->top; S->top = s; S->count++; return 1; } |
1 2 3 4 5 6 7 8 9 10 11 12 |
int Pop(LinkedStack * S,ElemType * e) { LinkedStackPtr p; if(StackEmpty(*S)) return 0; *e = S->top->data; p = S->top; S->top = S->top->next; free(p); S->count--; return 1; } |
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 大话数据结构_二叉树11/03
- ♥ 大话数据结构_线索二叉树11/04
- ♥ 大话数据结构_树森林二叉树转换与遍历01/10
- ♥ 大话数据结构_图表示01/14
- ♥ 大话数据结构_基础概念11/01
- ♥ 大话数据结构_线性表_双向链表11/01