数据结构学习-栈

xiaoxiao2021-02-28  121

目的

这一系列博客的目的在于复习巩固数据结构的基础知识,为考研面试笔试做准备,所以重在原理,代码实践不是重点。 参考书籍有严蔚敏老师的《数据结构(C语言版)》,《C/C++数据结构与算法速学速用大辞典》

顺序栈 在pop,push时,注意: 因为数据实际上是存储在DataType stack数组中,下标从0开始,所以top=0表示空栈,top=i表示栈顶元素存储在stack[i-1]中。 #define StackSize 100 typedef int DataType; typedef struct{ DataType stack[StackSize]; int top; }SeqStack; void InitStack(SeqStack *s) { s->top = 0; } int PushStack(SeqStack *s, DataType e) { if(s->top >= StackSize) { printf("stack is full!\n"); return 0; } else { s->stack[s->top] = e; s->top ++; return 1; } } int PopStack(SeqStack *s, DataType *e) { if(s->top == 0) { printf("stack is empty!\n"); return 0; } else { s->top --; *e = s->stack[s->top]; return 1; } } 链式栈 为降低插入删除的时间复杂度,链式栈插入删除都在栈顶指针的位置进行。 typedef DataType int; typedef struct node { DataType data; struct node *next; }LStackNode, *LinkStack; void InitStack(LinkStack *top) { if((*top=(LinkStack)malloc(sizeof(LStackNode))) == NULL) exit(-1); *top->next = NULL; } int StackEmpty(LinkStack top) { if(top->next == NULL) return 1; else return 0; } int PushStack(LinkStack top, DataType e) { LStackNode *p; if((p=(LStackNode*)malloc(sizeof(LStackNode))) == NULL) { printf("内存分配失败\n"); exit(-1); } p->data = e; p->next = top->next; top->next = p; return 1; }

共享栈

表达式求值

转载请注明原文地址: https://www.6miu.com/read-46803.html

最新回复(0)