- 什么是栈?
-
栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为栈顶,另一端固定的一端称为栈底,当栈中没有元素时称为空栈。先进后出,后进先出。
- 什么是顺序栈?
-
顺序栈是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针完成对顺序栈的各种操作。
- 什么是链式栈?
-
插入操作和删除操作均在链表头部进行,链表尾部就是栈底,栈顶指针就是头指针。
- 顺序栈的基本运算:
- (1)顺序栈的定义:
- 7 typedef struct {
8 data_t *data;
9 int maxnum;
10 int top;
11 }sqstack;
- (2)创建顺序栈:

8 sqstack* stack_create(int len) {
9
10 sqstack *s;
11
12 if ((s =(sqstack *)(malloc(sizeof(sqstack)))) == NULL) {
13 printf("malloc sqtack failed\n");
14 return NULL;
15 }
16
17 if ((s->data = (data_t *)(malloc(len * sizeof(data_t)))) == NULL) {
18 printf("malloc data failed\n");
19 return NULL;
20 }
21
22 memset(s->data, 0, len*sizeof(data_t));
23 s->maxnum = len;
24 s->top = -1;
25
26 return s;
27 }
~
42 void push_stack(sqstack *s, data_t x) {
43
44 if (s->top == s->maxnum-1) {
45 printf("stack is overflow!\n");
46 return ;
47 }
48 else {
49 s->top++;
50 s->data[s->top] = x;
51 }
52
53 return ;
54 }
4
37 int empty_stack(sqstack *s) {
38
39 return (s->top = -1 ? 1:0);
40 }
41
29 void clear_stack(sqstack *s) {
30 s->top = -1;
31 }
56 data_t pop_stack(sqstack *s) {
57
58 s->top--;
59 return (s->data[s->top+1]);
60 }
61
62 data_t get_pop_value(sqstack *s) {
63
64 return (s->data[s->top]);
65 }