数据结构第五节

1.栈(stack)是运算受限的线性表,这种线性表上的**插入和删除运算限定在表的某一端进行,允许进行插入和删除的一端称为栈顶,另一端称为栈底.**不含任何数据元素的栈称为空栈.处于栈顶位置的元素称为栈顶元素.

栈的修改原则是后进先出,因此,栈又称为后进先出线性表,简称后进先出表.栈的插入和删除运算分别称为进栈和出栈.

2.栈的基本运算:

  1. 初始化 initStack(S):构造一个空栈;
int Initstack(SeqStk *stk){
 stk->top=0;
 return 1;
}
  1. 判栈空 EmptyStack(S):若栈s为空栈,其结果为1 否则结果为0;
int EmptyStack(SeqStk *stk){
 if(stk->top==0) return 1;
 else return 0;
}
  1. 进栈Push(c,x):将元素x插入栈S中,使x成为S的栈顶元素;
int Push(SeqStk *stk,DataType x){
if(stk->top==maxsize-1){
  error("栈满");return 0;
}esle {
 stk->top++;
 stk->data[stk->top]=x;
 return 1;
}
}

4)出栈Pop(S):删除栈顶元素;

int Pop(SeqStk *stk){
  if(stk->top==0){
  error("栈空");return 0;
 }else {
 stk->top--;
 return 1;
}
 
}

5)取栈顶GetTop(S):返回栈顶元素;

DataType GetTop(SeqStk *stk){
 if(EmptyStack(stk))
  return NULLData;
  else
  return stk->data[stk->top];
}

3.栈的基本运算在顺序栈上的实现算法:
1)当空栈:栈顶下标值top==0,如果此时做出栈运算 ,则产生 “下溢”.
2)当栈中的数据元素已经填满了,如果再进行进栈操作,会发生"上溢"

4.队列(Queue)是有限同类数据元素的线性序列,是一种先进先出(First In First Out)的线性表,新增加的数据元素插在队列尾端,出队的数据元素在队列首部被删除.(排队的规则是不允许插队)

5.队列的基本运算:
1)队列初始化 InitQueue(Q):设置一个空队列Q;

void InitQueue(CycQue,CQ){
 CQ.front=0;CQ.rear=0;
}

2)判断队列为空 EmptyQueue(Q):若队列Q为空,则返回值为1,否则返回值为0;

int EmptyQueue(CycQue CQ){
 if(CQ.rear==CQ.front) return 1;
 else return 0;
}

3)入队列EnQueue(Q,x):将数据元素x从队尾一端插入队列,使其成为队列的新尾元素;

int EnQueue(CyCQue CQ,DataTYpe x){
 if((CQ.rear+1)%maxsize==CQ.front){
 error("队列满");return 0;
 }else {
 CQ.rear==(CQ,rear+1)%maxsize;
 CQ.data[CQ.rear]=x;
 return 1;
}
}

4)出队列 OutQueue(Q);删除对列首元素;

int OutQueue(CycQue CQ){
 if(EmptyQueue(CQ)){
 error("队列空");return 0;
}else {
CQ.front=(CQ.front+1)%maxsize;
return 1;
}
}

5)取队列首元素GetHead(Q):返回队列首元素的值.

DataType GetHead(CycQue CQ){
 if(Empty(CQ))
 return NULLData;
 else
 return CQ.data[(CQ.front+1)%maxsize];
}

6.循环队列:为了避免元素的移动,可以将存储队列元素的一维数组首尾相接,形成一个环状,在这里插入图片描述
循环队列的入队列操作语句为:
SQ.rear=(SQ.rear+1)%maxsize;SQ.data[SQ.rear]=x;
出队列操作对应的赋值语句为:
SQ.front=(SQ.front+1)%maxsize;
7.循环队列满,队列空条件
循环队列为空 CQ.rearCQ.front
循环队列为满 (CQ.rear+1)%maxsize
CQ.front

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web修理工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值