栈的顺序存储结构(进阶升级版)

在网上看了数据结构的相关课程,老师展示了一些源代码,把它们敲下,然后开始漫长的:完善代码—出错—百度查找错误及解决办法—改进代码—学习新知识的过程

刚开始的顺序栈代码:

typedef struct

    {elemtype *base;
    elemtype *top;
    int stacksize;

    }sqstack;


#define stack_init_size 100

initstack(sqstack *s)
{s->base=(elemtype *)malloc(stack_init_size *sizeof(elemtype));
      if(!s->base)
      exit(0);
      s->top=s->base;
      s->stacksize=stack_init_size;}



#define stackincrement 10

push(sqstack *s,elemtype e)

        { if(s->top-s->base>=s->stacksize)
{s->base=(elemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(elemtype));
if(!s->base)
         exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+stackincrement;
}
        *(s->top)=e;
s->top++;}

有很多不懂的知识点,运行后也有很多错误:



注释和修改后代码如下:

#include <iostream>
#include <malloc.h>//调用realloc函数所需要的头文件
using namespace std;
#define stack_init_size 100//宏定义初始化并命名 初始化栈100个空间
#define stackincrement 10//增长量为10
typedef int elemtype;
typedef int status;
typedef struct
{elemtype *base;//指向栈底的指针变量
elemtype *top;//指向栈顶的指针变量   使用elemtype形式更接近操作系统的根本原理
int stacksize;//当前可使用的最大容量
}sqstack;//以上为声明一个结构体,并用SqStack作为这个结构体名,结构体即为我们自己定义的数据类型

 status initstack(sqstack *s)
 {
   s->base=(elemtype *)malloc(stack_init_size *sizeof(elemtype));//调用malloc函数申请空间
   if(!s->base)
   exit(0);//申请空间若为空值  失败则退出
   s->top=s->base;//空栈故栈底即栈顶
   s->stacksize=stack_init_size;
 return 0; }

 status push(sqstack *s,elemtype e)
 { if(s->top-s->base>=s->stacksize)//如果栈满追加空间,实现动态增容
{s->base=(elemtype *)realloc(s->base,(s->stacksize+stackincrement)*sizeof(elemtype));//实现动态增容 调用realloc函数追加空间 对malloc函数进行再封装 在内存中开辟空间将原来的内容拷贝到新的空间上 指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)
if(!s->base)
exit(0);//申请失败,退出
s->top=s->base+s->stacksize;//设置栈顶
s->stacksize=s->stacksize+stackincrement;//设置栈的最大容量
}


*(s->top)=e;//放入数据
s->top++;
return 0;

 
  status pop(sqstack *s,elemtype *e)
{
if(s->top!=s->base)//栈已空
 
 
*e=*--(s->top);//先将指针减一后再取出内容赋值给e
return 0;
}

中间出现的错误:


错误解决:



错误出现很多次也改了很多次,经过自己修改后,学会了新知识也知道怎么解决以前没出现的错误


最后调试完成但缺乏主函数部分,于是自己添加了主函数的定义,依旧是出现错误修改错误的循环




最后的错误:


因为不知如何修改,所以只能停在这,但之前的源程序和头文件已经没有错误。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值