栈是在数据结构中经常能遇到的,在我们平时也能遇到。比如当我们在打断点调试时,经常能遇到堆栈,先调用的后出来。或者网页的后退键也是栈的应用。
一.栈及其初始化
- 栈是限定仅在表尾进行插入和删除操作的线性表。
- 我们把允许插入的一端称为栈顶,另一端称为栈底。
- 栈称为先进后出,简称FOLI
- 栈也是线性表,也有前驱后继关系。线性表的表尾是栈顶
- 栈插入操作叫进栈,入栈
- 栈删除操作叫出栈
栈的结构
栈的顺序存储
#define MAXSIZE 7
typedef int SElemtype;
typedef struct{
SElemtype data[MAXSIZE];
int top;
}Stack;
栈的初始化
void Stack_Init(Stack *s,int n)
{
int i;
s->top = n - 1;
for(i = 0;i < n;i++)
{
s->data[i] = i + 10;
printf("%d ",s->data[i]);
}
printf("\n");
}
二.栈的操作(出栈,入栈)
2.1入栈
因为操作都在栈顶操作,所以时间复杂度都是O(1)
Status Push(Stack *s,SElemtype e)
{
if(s->top == MAXSIZE - 1)
return ERROR;
s->data[++(s->top)] = e;
return OK;
}
这里就是别忘了栈顶的移动和判断能否入栈
2.2出栈
Status Poll(Stack *s,SElemtype *e)
{
if(s->top == -1)
return ERROR;
*e = s->data[(s->top)--];
return OK;
}
2.3代码实现:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 7
typedef int SElemtype;
typedef int Status;
#define OK 1
#define ERROR 0
typedef struct{
SElemtype data[MAXSIZE];
int top;
}Stack;
void Stack_Init(Stack *s,int n)
{
int i;
s->top = n