最近学习数据结构,一开始接触感觉好难,颓废了一段时间,后来又重新翻开学习,突然感觉到很大的兴趣。对这些代码的运用都有了 一些新的认识。下面简单的讲述下最新学到的顺序栈,不知道大家学习的时候会不会有感觉,书上写的那么简单,但是我写的都是不对,不是这里有错就是那里有错,最后还是攻克了,心理慢慢地成就感。

题目大概:输入一串整数,如果 该数不等于-1,就进栈,若是等于-1,则输出栈顶整数并出栈。同时算法给出应对异常的情况。

代码实现

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAX 100
typedef int ElemType;
typedef struct
{
ElemType *top;
ElemType *base;
int stacksize;
}SqStack;
//给予栈初始化
bool InitStack(SqStack &S)
{
S.base=new ElemType[MAX];
if(!S.base) return false;
S.top=S.base;
S.stacksize=MAX;
return true;

}
//输出栈顶元素
char GetTop(SqStack S)
{
if(S.top!=S.base)
printf("获取栈顶数:%d\n",*(S.top-1));
}
//入栈
bool Pop(SqStack &S,ElemType &e)
{
if(S.top==S.base) return false;
e=*--S.top;
printf("出栈数:%d\n",e);
return true;
}
//出栈
bool Push(SqStack &S,ElemType &e)
{
if(S.top-S.base==S.stacksize) return false;
if(e==-1)
{
GetTop(S);
Pop(S,e);
return true;
}
*S.top++=e;
printf("入栈数:%d\n",e);
return true;
}
//判断是否为空
int IsEmpty(SqStack S)
{
if(S.top==S.base) return 1;
else
return 0;
}
//判断是否为满
int IsFull(SqStack S)
{
if(S.top-S.base==S.stacksize) return 1;
else
return 0;
}
//销毁
int DestroyStack( SqStack &S )
{
if( S.base )
{
delete S.base ;
S.stacksize = 0;
S.base = S.top = NULL;
}
return 1;
}

主函数部分
int main()
{
SqStack s;
ElemType e;
int i;
printf("(1)初始化\n");
InitStack(s);
printf("初始化是否成功:%s\n",(InitStack(s)?"是":"否"));
printf("(2)PUSH:\n");
for( i = 0; i < 5;i++ )
{
e=i;
Push( s, e );
}
printf("(3)测试:当输入数为-1时\n");
e=-1;
Push( s, e );
printf("(4)输出栈是否为空为 %s\n",(IsEmpty(s)?"空":"非空"));
printf("(5)输出栈是否为满为 %s\n",(IsFull(s)?"满":"非满"));
printf("(6)销毁栈 %s\n",(DestroyStack(s)?"成功":"失败"));
return 0;
}

问题:

1.base opera of -> has non-pointer type ...

有时候编译软件在用->就报错,但是修改为S.base就为正确了

2.还有 一点符号问题&与*是有区别了,注意看

3.剩下的问题就不列举了

顺序栈操作--数据结构(C++)版的更多相关文章

  1. 顺序栈与两栈共享空间-C语言实现

    栈是一种只能允许在栈顶插入数据与删除数据的数据结构,其实这就是一种特殊的线性表,特殊在 只能在表尾进行增减元素,上代码 #include <stdio.h> #define MAXSIZE ...

  2. 利用顺序栈解决括号匹配问题(c++)-- 数据结构

    题目: 7-1 括号匹配 (30 分)   给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...

  3. 数据结构:C_顺序栈的实现

    数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...

  4. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  5. 数据结构Java实现03----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  6. 【C#】【数据结构】005-栈:顺序栈

    C#数据结构:顺序栈 1.自定义顺序栈结构: /// <summary> /// 顺序栈 /// </summary> /// <typeparam name=" ...

  7. 数据结构 - 顺序栈的实行(C语言)

    数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...

  8. [C++]数据结构:栈之顺序栈

    0 栈的基本概念 栈,根据存储结构的不同,可分为:链栈和顺序栈. 1 顺序栈的知识概览 2 编程复现 2.1 定义基本数据结构 typedef char DataType; // 基本数据类型 enu ...

  9. 数据结构之顺序栈SqStack

    顺序栈SqStack 基本操作 Status InitStack()//构造一个空栈S Status DestroyStack()//销毁栈S,S不再存在 Status ClearStack()//把 ...

随机推荐

  1. MyBatis---集合查询(一对多)

    这里的集合查询即一对多的数据联合查询.如一个用户多次登录的信息查询 要实现这样的联合查询需要在用户实体类中添加登录实体类的一个集合属性字段,表中不存在该字段. <resultMap id=&qu ...

  2. 学习网络请求返回json对应的model

    原来泛型可以这样用: 网络返回基类,返回一个code,msg,body,其中body不确定,所以,我们把它写成泛型 import org.json.JSONObject; /** * 网络请求的基类 ...

  3. 缓存(CDN缓存,浏览器(客户端)缓存)

    1.什么是缓存? 缓存是一种数据结构,用于快速查找以及执行的操作结果.因此,如果一个操作执行起来很慢,对于常用的输入数据就可以将操作的结果缓存,并在下次调用该操作时使用缓存的数据. 缓存是一个到处都存 ...

  4. Adobe Photoshop Lightroom 5.3和序列号

    Adobe Photoshop Lightroom是一款针对专业摄影师开发的专业照片管理和处理软件.12.11发布了Lightroom 5.3正式版,这个版本支持RAW格式(相机原始数据格式),镜头配 ...

  5. GTID环境中手动修复主从故障一例(Error 1236/Error 1396)

      Preface       I got an replication error 1236 when I modified the password of a user without start ...

  6. 遍历两个自定义列表来实现字典(key:value)

    #自定义key    ${keys}    create list    key1    key2    key3 #自定义value    ${values}    create list    v ...

  7. JMeter学习笔记(十一) 关于 CSV Data Set Config 的 Sharing mode 对取值的影响

    关于 CSV Data Set Config 的一些介绍之前已经梳理过了,可以参考: https://www.cnblogs.com/xiaoyu2018/p/10184127.html . 今天主要 ...

  8. Windows7中如何让python2和python3共存并使用pip

    1.下载安装python2和python3 分别下载python2.7.exe.python3.6.exe并安装到C盘.E盘(如图)     2.配置环境变量 打开“系统变量”中的path文本框(如图 ...

  9. os--留

    os.path.abspath(path) #返回绝对路径    绝对路径和文件路径的区别,绝对路径是当前在操作文本的路径,文件路径是当前文本的文件的路径 os.path.basename(path) ...

  10. 第三方库的安装:Pangolin

    Pangolin: 一款开源的OPENGL显示库,可以用来视频显示.而且开发容易. 代码我们可以从Github 进行下载:https://github.com/stevenlovegrove/Pang ...