栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构,栈的复习】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构,栈的复习】

数据结构&栈&知识点复习
  • 栈的存储实现
    • 顺序栈
      • 顺序栈的定义(初始化)
      • 顺序栈的基本操作(增删改查)
    • 链栈
      • 链栈的实现

栈的存储实现 顺序栈 顺序栈的定义(初始化)
#define MaxSize 10 //定义栈中最大元素的个数
typedef struct {
ElemType data[MaxSize];//静态数组存放栈中元素
int top;//栈顶指针,一般来说,栈顶指针记录的是数组元素的下标,也就是从零开始的
}SqStack;

分配好存储空间后,接下来进行初始化的操作。刚开始时由于数组中还没有存放元素,所以top指针的值为-1;
所以判断栈空,即为判断top指针的值是否为-1.
代码如下:

bool StackEmpty(SqStack S){
if (s.top ==-1)//栈空
  return true;
else        //不空
   return false;
}

顺序栈的基本操作(增删改查)

进栈操作:

//新元素入栈:
bool Push(SqStack &S,Elemtype x)
{
//先判断栈是否已满
if (S.top==MaxSize-1)
  return false;
 else
 {
 S.top =S.top+1;   //top指针先加一
 S.data [S.top]=x;//新元素入栈
 return true;
 }


出栈操作:删除栈顶元素,并且使用变量x进行返回

bool Pop (SqStack &S,Elemtype &x)
{
//先判断栈是否为空
if (S.top ==1)
  return false;
else{
x=S.data[S.top];//栈顶元素先出栈
S.top =S.top-1;//指针再减一
return true;
}
/*注意此时,数据还残留在内存中,只是逻辑上被删除了
x=S.data[S.top]//栈顶元素先出栈
S.top =S.top-1;//指针再减一
等价于x=S.data[S.top--];

读取栈顶元素

//和出栈类似,知识不需要移动top指针,读取即可
bool Pop (SqStack &S,Elemtype &x)
{
//先判断栈是否为空
if (S.top ==1)
  return false;
else{
x=S.data[S.top];//栈顶元素先出栈
return true;
}

另一种方式:
以上栈的操作是基于top指针指向当前栈顶元素;
下面还用另一种实现方式:
让top指针指向下一个我们可以插入元素的位置
则代码如下:

bool StackEmpty(SqStack S){
if (s.top ==0)//栈空
  return true;
else        //不空
   return false;
}

如果是这样设计的话,以元素入栈为例,此时,需要先把x放到top指针此时算指向的位置,然后再让top指针加一,算以这种情况下应该是:

S.data[S.top++]=x;//注意前面进行对比

同理元素出栈则为:

x=S.data[--S.top];//注意前面进行对比

判断栈满:

S.top ==MaxSize;//注意前面进行对比

共享栈:
两个栈共享同一片空间:

#define MaxSize 10
typedef Struct{
ElemType data[MaxSize];//静态数组存放栈中元素
int top0;//0号栈栈顶指针
int top1;//1号栈栈顶指针
}ShStack;
//初始化栈:
void InitStack(ShStack &S)
{
S.top0=-1;
s.top1=MaxSize;
}
//栈满的条件:
//top0 + 1 == top1

链栈 链栈的实现

回顾,头插法建立单链表:
进栈和出栈操作对应于链栈的插入和删除操作。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/947806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号