顺序栈操作--数据结构(C++)版
最近学习数据结构,一开始接触感觉好难,颓废了一段时间,后来又重新翻开学习,突然感觉到很大的兴趣。对这些代码的运用都有了 一些新的认识。下面简单的讲述下最新学到的顺序栈,不知道大家学习的时候会不会有感觉,书上写的那么简单,但是我写的都是不对,不是这里有错就是那里有错,最后还是攻克了,心理慢慢地成就感。
题目大概:输入一串整数,如果 该数不等于-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++)版的更多相关文章
- 顺序栈与两栈共享空间-C语言实现
栈是一种只能允许在栈顶插入数据与删除数据的数据结构,其实这就是一种特殊的线性表,特殊在 只能在表尾进行增减元素,上代码 #include <stdio.h> #define MAXSIZE ...
- 利用顺序栈解决括号匹配问题(c++)-- 数据结构
题目: 7-1 括号匹配 (30 分) 给定一串字符,不超过100个字符,可能包括括号.数字.字母.标点符号.空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配. 输入格式: 输入在一行 ...
- 数据结构:C_顺序栈的实现
数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 数据结构Java实现03----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 【C#】【数据结构】005-栈:顺序栈
C#数据结构:顺序栈 1.自定义顺序栈结构: /// <summary> /// 顺序栈 /// </summary> /// <typeparam name=" ...
- 数据结构 - 顺序栈的实行(C语言)
数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...
- [C++]数据结构:栈之顺序栈
0 栈的基本概念 栈,根据存储结构的不同,可分为:链栈和顺序栈. 1 顺序栈的知识概览 2 编程复现 2.1 定义基本数据结构 typedef char DataType; // 基本数据类型 enu ...
- 数据结构之顺序栈SqStack
顺序栈SqStack 基本操作 Status InitStack()//构造一个空栈S Status DestroyStack()//销毁栈S,S不再存在 Status ClearStack()//把 ...
随机推荐
- 内置函数--sorted,filter,map
sorted() 排序函数. 语法: sorted(Iterable, key=None, reverse=False) Iterable: 可迭代对象; key: 排序规则(排序函数); reve ...
- Result Maps collection does not contain value for XXXXX
在做mybatis多表查询的时候,出现了下面的错误: java.lang.IllegalArgumentException: Result Maps collection does not conta ...
- 内存释放free函数的异常问题
本次在实际应用中遇到一个问题,首先是定义了一个指针,然后这个指针指向某一个地址,但是这个地址不是用malloc分配的.如果后面用free去释放这个指针会产生什么现象. 首先看下指针的声明和使用 uin ...
- Scrapy使用示例
很多网站都提供了浏览者本地的天气信息,这些信息是如何获取到的呢,方法有很多种,大多是利用某些网站提供的天气api获取的,也有利用爬虫采集的.本文就介绍如何用Scrapy来采集天气信息(从新浪天气频道采 ...
- 【Linear Support Vector Machine】林轩田机器学习技法
首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下 ...
- Eclipse 出现“polling news feeds”的解决办法
小编突然心血来潮,安装了一下Java的环境,eclipse的IDE来写点Java,但是是不是出现以下的弹窗,实在是闹心,后来网上看了前辈们的解决办法,特此记录一下.如有侵权,敬请告知!!! 1. 找到 ...
- Django学习笔记(二):使用Template让HTML、CSS参与网页建立
Django学习笔记(二):使用Template让HTML.CSS参与网页建立 通过本文章实现: 了解Django中Template的使用 让HTML.CSS等参与网页建立 利用静态文件应用网页样式 ...
- Python学习3,列表
列表就是能够包含几个或者上千上万个元素,对我这种新手来说应该是最重要的了! _author_ = "Happyboy" shopping = ['Iphone','Huawei', ...
- day04_07-三个函数的区别
<?php $link = @mysql_connect('localhost','root',''); mysql_query('use test',$link); mysql_query(' ...
- HDU 4667 Building Fence 计算几何 凸包+圆
1.三角形的所有端点 2.过所有三角形的端点对所有圆做切线,得到所有切点. 3.做任意两圆的外公切线,得到所有切点. 对上述所有点求凸包,标记每个点是三角形上的点还是某个圆上的点. 求完凸包后,因为所 ...