代码先锋网 代码片段及技术文章聚合

数据结构-顺序栈的基本操作的实现(含全部代码)

主要操作函数如下:

  •     InitStack(SqStack &s) 参数:顺序栈s 功能:初始化  时间复杂度O(1)
  •     Push(SqStack &s,SElemType e) 参数:顺序栈s,元素e 功能:将e入栈 时间复杂度:O(1)
  •     Pop(SqStack &s,SElemType &e) 参数:顺序栈s,元素e 功能:出栈,e接收出栈元素值 时间复杂度O(1)
  •     GetTop(SqStack s,SElemType &e) 参数:顺序栈s,元素e 功能:得到栈顶元素 时间复杂度O(1)
  •     注意:严蔚敏版没有判断栈空函数,在入栈、出栈函数里面判断栈是否空,与王道的不同 尤其是top指针在base之上(有元素时)另外,严蔚敏版 59页取栈顶有误
    /*
        Project: sequence_stack (数据结构-顺序栈)
        Date:    2018/09/14
        Author:  Frank Yu
    	InitStack(SqStack &s) 参数:顺序栈s 功能:初始化  时间复杂度O(1)
    	Push(SqStack &s,SElemType e) 参数:顺序栈s,元素e 功能:将e入栈 时间复杂度:O(1)
    	Pop(SqStack &s,SElemType &e) 参数:顺序栈s,元素e 功能:出栈,e接收出栈元素值 时间复杂度O(1)
    	GetTop(SqStack s,SElemType &e) 参数:顺序栈s,元素e 功能:得到栈顶元素 时间复杂度O(1)
    	注意:严蔚敏版没有判断栈空函数,在入栈、出栈函数里面判断栈是否空,与王道的不同 尤其是top指针在base之上(有元素时)
    	      另外,严蔚敏版 59页取栈顶有误
    	
    */
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    using namespace std;
    #define Status int
    #define SElemType int
    #define MaxSize 100
    //栈数据结构
    typedef struct Stack
    {
    	SElemType *base;//栈底指针 不变
    	SElemType *top;//栈顶指针 一直在栈顶元素上一个位置
    	int stacksize;//栈可用的最大容量
    }SqStack;
    //**************************************基本操作函数************************************//
    //初始化函数
    Status InitStack(SqStack &s)
    {
    	s.base=new SElemType[MaxSize];//动态分配最大容量
    	if(!s.base)
    	{
    		printf("分配失败\n");
    		return 0;
    	}
    	s.top=s.base;//栈顶指针与栈底相同 王道上top起初在base下面,感觉很别扭,top应该高于或等于base
    	s.stacksize=MaxSize;
    	return 1;
    }
    //入栈
    Status Push(SqStack &s,SElemType e)
    {
    	if(s.top-s.base==s.stacksize) return 0;//栈满
    	*(s.top++)=e;//先入栈,栈顶指针再上移 注意与王道上的不同,具体问题具体分析
    	return 1;	
    }
    //出栈 用e返回值,注意e是应用类型
    Status Pop(SqStack &s,SElemType &e)
    {
    	if(s.top==s.base) return 0;//栈空
    	e=*--s.top;//先减减 指向栈顶元素,再给e
    	return 1;	
    }
    //得到栈顶元素,不修改指针
    bool GetTop(SqStack s,SElemType &e) //严蔚敏版59页有问题,应该用e去获得,函数返回bool类型去判断
    {
    	if(s.top==s.base) return false;//栈空			
    	else e=*--s.top;
    	return true;
    		
    }
    //********************************功能实现函数**************************************//
    //菜单
    void menu()
    {
       printf("********1.入栈      2.出栈*********\n");
       printf("********3.取栈顶    4.退出*********\n");
    }
    //入栈功能函数 调用Push函数
    void PushToStack(SqStack &s)
    {
    	int n;SElemType e;int flag;
    	printf("请输入入栈元素个数(>=1):\n");
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    	 printf("请输入第%d个元素的值:",i+1);
    	 scanf("%d",&e);
    	 flag=Push(s,e);
    	 if(flag)printf("%d已入栈\n",e);
    	 else {printf("栈已满!!!\n");break;}
    	}
    }
    //出栈功能函数 调用Pop函数
    void PopFromStack(SqStack &s)
    {
    	int n;SElemType e;int flag;
    	printf("请输入出栈元素个数(>=1):\n");
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    	{
    	 flag=Pop(s,e);
    	 if(flag)printf("%d已出栈\n",e);
    	 else {printf("栈已空!!!\n");break;}
    	}
    }
    //取栈顶功能函数 调用GetTop
    void GetTopOfStack(SqStack &s)
    {
    	SElemType e;bool flag; 
    	flag=GetTop(s,e);
    	if(flag)printf("栈顶元素为:%d\n",e);
    	else printf("栈已空!!!\n");
    }
    //主函数
    int main()
    {
     SqStack s;int choice;
     InitStack(s);
     while(1)
     {
      menu();
      printf("请输入菜单序号:\n");
      scanf("%d",&choice);
      if(choice==4) break;
      switch(choice)
      {
      case 1:PushToStack(s);break;
      case 2:PopFromStack(s);break;
      case 3:GetTopOfStack(s);break;
      default:printf("输入错误!!!\n");
      }
     }
     return 0;
    }
    
    基本操作结果截图

    更多数据结构实现:数据结构严蔚敏版的实现(含全部代码)

    有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

版权声明:本文为lady_killer9原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lady_killer9/article/details/82712668

智能推荐

数据结构 顺序栈的基本操作 C语言

复习过程回顾数据结构    ...

数据结构--顺序栈的基本操作

顺序栈的基本操作,有个地方没搞懂,以后会来更新的。...

数据结构——静态顺序栈的基本操作

代码主要来源:【数据结构】【清华大学】【严蔚敏】 /代码背景是基于书上的,可内容确实是自己理解后敲的,这不禁让人思考(纠结)原创的定义了/ 顺序栈S的基本运算如下: (1)初始化栈S (2)栈为空 (3)依次进栈元素a,b,c,d,e (4)栈为非空 (5)出栈序列:e d c b a (6)栈为空 (7)释放栈 //本题静态栈,不用有释放空间的步骤,非要释放可以用memset(a,0,MAXSI...

【数据结构】顺序栈的基本操作

  本篇主要实现了顺序栈的基本操作,包括压栈、出栈、判空、栈大小以及清空和销毁。 头文件 stack.h 源代码 1.stack.c 2.test.c 输出结果   首先依次入栈1、2、3、4、5,然后查看栈顶元素,   接着出栈,再次查看栈顶元素,   最后判断栈是否为空,以及查看栈的大小。...

数据结构——顺序栈的基本操作

数据结构——顺序栈的基本操作        顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到 栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。由于C语言中数组的下标是从0开始的,通常习惯的做法是:以top=-1 表示空栈。 顺序栈的定义如下: 顺序栈的初始算法 判断栈是否满 判...

猜你喜欢

数据结构:顺序栈的基本操作

       采用顺序存储结构的栈称为顺序栈。顺序栈利用一组连续的存储单元存放栈中的元素,存放顺序依次从栈底到栈顶。由于栈中元素之间的存放地址的连续性,在C语言中,同样采用数组实现栈的顺序存储。另外,增加一个栈顶指针top,用于指向顺序栈的栈顶元素。        通常top=0或者top=-1表示栈为空。两者的区别简...

数据结构系列-顺序栈的基本操作

栈(Stack)是限定只能在表尾部进行插入、删除的线性表。也称后进先出的线性表。允许执行插入、删除的那一端成为栈顶,另一端就是栈底,因为只能在栈顶执行操作,所以他是一种特殊的线性表。 既然栈是特殊的线性表,也会有顺序存储和链式存储。 对于栈的顺序存储,就是用数组来实现,将下标0的一端作为栈底,因为首元素都在栈底,变化最小。 顺序栈的数据结构及基本操作: 如果需要改变栈的内容,函数的参数类型为指针,...

数据结构 - 顺序栈的基本操作(C语言)

顺序栈:利用顺序存储方式实现的栈。 顺序栈的定义: (1):栈中元素用一个预设的足够长度的一维数组来实现:DataType data[MAXSIZE]。 (2):栈底位置可以设置在数组的任何一个端点,而栈顶随着插入和删除而变化。 (3):用int top 作为栈顶的指针,指明当前栈顶位置。通常:0下标设为栈底,空栈时top=-1;入栈时栈顶指针+1,出栈时栈顶指针-1。 顺序栈的存储结构如下: 完...

数据结构——顺序栈的基本操作(C语言)

顺序栈的基本操作 1.进栈 2.出栈 3.判空 4.获取栈顶元素...

JavaScript中的$符号

一直不知道为什么那么多JS代码里面都用到了$符号,查了下,外文的。虽然很长,但还是建议看一遍,讲得通俗易懂,又不失深度,值得一看。文章最后是我的总结,请指正。 转自:http://www.authenticsociety.com/blog/JavaScript_DollarSign Javascript Dollar Sign. A beginner, or even a seasoned Jav...