数据结构---C语言栈&队列

知识点:

栈:

只允许在一端进行插入或删除操作的线性表,先进后出LIFO
类似一摞书,按顺序拿,先放的书只能最后拿;
顺序栈:栈的顺序存储

cpp 复制代码
typedef struct{
	Elemtype data[50];
	int top;
}SqStack;
SqStack S;

基本操作:(使用数组实现栈--》顺序栈)

cpp 复制代码
#define MaxSize 50
typedef int ElemType;
//顺序栈
typedef struct{
	ElemType data[MaxSize];
	int top;
}SqStack;
//初始化栈 
void InitStack(SqStack &S){
	S.top=-1;
}
//判空 
bool StackEmpty(SqStack &S){
	if(S.top==-1)
		return true;
	return false;
}
//入栈
bool Push(SqStack &S,ElemType x){
	if(S.top==MaxSize-1) return false;//栈满
	S.data[++S.top]=x;
	//S.top++;
	//S.data[S.top]=x; 
	return true; 
} 
//出栈
bool Pop(SqStack &S,ElemType &x){
	if(-1==S.top)//栈空 
		return false;
	x=S.data[S.top--];//后减减,x=S.data[S.top];S.top=S.top-1;
	return true;
}
//读取栈顶元素
bool GetTop(SqStack &S,ElemType &x){
	if(-1==S.top)//说明栈为空
		return false;
	x=S.data[S.top];
	return true;
}
int main(){
	SqStack S;
	bool flag;
	ElemType m;
	InitStack(S);
	flag=StackEmpty(S);
	if(flag){
		printf("kong");
	} 
	Push(S,3);
	Push(S,4);
	flag=GetTop(S,m);
	if(flag) printf("s[top]==%d",m);
	flag=Pop(S,m);
	if(flag) printf("s[top]==%d",m);
	return 0;
} 




队列(Queue)

简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向
队列中插入元素称为入队或进队;删除元素称为出队或离队
先进先出 FIFO,其实就是排队打饭的队伍
队头( Front ):允许删除的一端,又称队首。
队尾( Rear ):允许插入的一端。
队列中主要学习循环队列:
循环队列

cpp 复制代码
(Q.rear+1)%MaxSize==Q.front//队满
 Q.rear==Q.front //队空
cpp 复制代码
//循环队列
#define MaxSize 5;
typedef int ElemType;
typedef struct{
	ElemType data[MaxSize];//最多存储max-1个,数组从0开始 
	int front,rear;
}SqQueue;

void InitQueue(SqQueue &Q){
	Q.rear=Q.front=0;
}

//判空
bool isEmpty(SqQueue &Q){
	if(Q.rear==Q.front)//不需要为零
	return true;
	return false;
}

//入队 尾巴在向后移动
bool EnQueue(SqQueue &Q,ElemType x){
	if((Q.rear+1)%MaxSize==Q.front) return false;
	Q.data[Q.rear]=x;
	Q.rear=(Q.rear+1)%MaxSize;
	return true;
} 

//出队 头在向后移动 
bool DeQueue(SqQueue &Q,ElemType &x){
	if(Q.rear==Q.front)
		return false;
	x=Q.data[Q.front];//先进先出
	Q.front=(Q.front+1)%MaxSize;
return true;
}
相关推荐
John.Lewis几秒前
数据结构初阶(8)二叉树的顺序结构 && 堆
c语言·数据结构·算法
再睡一夏就好1 小时前
【排序算法】④堆排序
c语言·数据结构·c++·笔记·算法·排序算法
再睡一夏就好1 小时前
【排序算法】⑥快速排序:Hoare、挖坑法、前后指针法
c语言·数据结构·经验分享·学习·算法·排序算法·学习笔记
程序员莫小特1 小时前
老题新解|求一元二次方程
数据结构·c++·算法·青少年编程·c·信息学奥赛一本通
啊阿狸不会拉杆4 小时前
《算法导论》第 21 章-用于不相交集合的数据结构
数据结构·c++·算法·随机森林
·白小白6 小时前
【数据结构】——顺序表链表(超详细解析!!!)
数据结构·链表
想不明白的过度思考者6 小时前
初识数据结构——优先级队列(堆!堆!堆!)
数据结构
啊阿狸不会拉杆7 小时前
《算法导论》第 18 章 - B 树
数据结构·c++·b树·算法·排序算法
再睡一夏就好7 小时前
【排序算法】⑦归并排序
c语言·数据结构·算法·排序算法·学习笔记
熬了夜的程序员19 小时前
【华为机试】208. 实现 Trie (前缀树)
数据结构·算法·华为od·华为