栈
来源:互联网 发布:阿里云搜索 编辑:程序博客网 时间:2024/05/17 07:24
栈是限定仅在表尾进行插入和删除操作的线性表。
允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。
栈又称为后进先出的线性表,简称LIFO结构。
栈的插入操作,叫做进栈,也称压栈,入栈。栈的删除操作,叫做出栈,也称弹栈。
最先进栈的元素是不是只能是最后出栈?答案是不一定!
栈的顺序存储结构
数组下标为0的一端作为栈底,定义top变量来指示栈顶元素在数组中的位置。
空栈:top = -1
栈满:top = MAXSIZE - 1
顺序栈的结构定义:
typedef int SElemType;typedef struct {SElemType data[MAXSIZE];int top;} SqStack;顺序栈的入栈操作:
Status Push(SqStack *S, SElemType e){if (S->top == MAXSIZE - 1)return ERROR;S->top++;S->data[S->top] = e;return OK;}
顺序栈的出栈操作:
Status Pop(SqStack *S, SElemType *e){if (S->top == -1)return ERROR;*e = S->data[S->top];S->top--;return OK;}出入栈操作没有涉及到任何循环语句,时间复杂度是O(1)。
两栈共享空间
数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为数组的末端,即下标为n-1处。两个栈如果增加元素,就是两个端点向中间延伸。
栈1为空:top1 = -1;栈2为空:top2 = n
栈满:top 1+ 1 = top2
两栈共享空间的结构:
typedef struct {SElemType data[MAXSIZE];int top1;int top2;} SqDoubleStack;
两栈共享空间的Push操作:
Status Push(SqDoubleStack *S, SElemType e, int stackNumber){if (S->top1 + 1 == S->top2)return ERROR;if (stackNumber == 1)S->data[++S->top1] = e;else if (stackNumber == 2)S->data[--S->top2] = e;return OK;}
两栈共享空间的Pop操作:
Status Pop(SqDoubleStack *S, SElemType *e, int stackNumber){if (stackNumber == 1){if (S->top1 == -1)return ERROR;*e = S->data[S->top1--];}else if (stackNumber == 2){if (S->top2 == MAXSIZE)return ERROR;*e = S->data[S->top2++];}return OK;}
链式栈
链式栈不需要头结点,只需要一个栈顶指针top。
栈为空:top = NULL
链式栈的结构:
typedef struct StackNode{SElemType data;struct StackNode *next;} StackNode, *LinkStackPtr;typedef struct LinkStack{LinkStackPtr top;int count;} LinkStack;
链式栈的入栈:
Status Push(LinkStack *S, SElemType e){LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));s->data = e;s->next = S->top;S->top = s;S->count++;return OK;}
链式栈的出栈:
Status Pop(LinkStack *S, SElemType *e){LinkStackPtr p;if (StackEmpty(*S))return ERROR;*e = S->top->data;p = S->top;S->top = S->top->next;free(p);S->count--;return OK;}出入栈操作没有涉及到任何循环语句,时间复杂度是O(1)。
0 0
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 栈
- 【Lua】ElJudge 000 Sum of two integers
- linux6及centOS启动时提留在bringing up interface eth0:解决
- 我为自己代言
- OCP-1Z0-053-200题-199题-159
- 【Lua】ElJudge 001 Max of Integers
- 栈
- 分区格式--MBR与GPT
- UVa 11361 Investigating Div-Sum Property / 数位DP
- 新年新气象
- 你好大家!这是我第一博客文章 (或者是第一在这里这个网站的)
- Shell学习(4)——shell变量(三)
- Ajax返回XML数据
- uva 657 The die is cast
- 用python来进行html页面解析