栈的定义
栈(Stack)是只允许在一段进行插入或删除操作的线性表
栈的各种操作
一.基本操作
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10 //定义栈中元素的最大个数
//顺序栈由静态数组实现
typedef struct{
int data[MaxSize]; //静态数组存放栈中元素
int top;
}SqStack ; //sq:sequence---顺序
void testStack(){
SqStack s;//声明一个顺序栈(分配空间)
InitStack(s);
}
//初始化栈
void InitStack(SqStack &s){
S.top=-1; //初始化栈顶指针
}
//判断栈空
bool StackEmpty(SqStack S){
if(S.top==-1) //栈空
return true;
else //不空
return false;
}
//新元素入栈
bool Push(SqStack &S,int x){
if(S.top==MaxSize-1)
return false;
S.top=S.top+1;
S.data[S.top]=x;
//等价S.data[++S.top]=x; ++这里不可写道后面去
}
//出栈操作
bool Pop(SqStack &s,int &x){
if(S.top==-1) //栈空,报错
return false;
x=S.data[S.top]; //栈顶元素先出栈
S.top=S.top-1;
//等价x=S.data[S.top--]
return true;
}
//读取栈顶元素
bool GetTop(SqStack S,int &x){
if(S.top==-1) //栈空,报错
return false;
x=S.data[S.top];
return true;
}
图解![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/dbceaa3c58761b91158363358c77a501.png)
栈的链式实现
#include<stdio.h>
#include<stdlib.h>
typedef struct Linknode{
int data; //数据域
sturct Linknode *next; //指针域
}*LiStack; //栈类型定义
//与之前线性表类似此处省略
二.共享栈
两个栈共享同一片空间
基础操作
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10 //定义栈中元素的最大个数
//顺序栈由静态数组实现
typedef struct{
int data[MaxSize]; //静态数组存放栈中元素
int top0; //0号栈栈顶指针
int top1; //1号栈栈顶指针
}ShStack;
//初始化栈
void InitStack(ShStack &S){
S.top0=-1; //初始化栈顶指针
S.top1=MaxSize;
}
//栈满的条件
//top0+1==top1
图解
队列
队列是一种只允许在一端进行插入,在另一端删除的线性表
队头:允许删除的一端
队尾:允许插入的一端
队列特点:先进先出