数据结构 P46-47 算法实现 顺序栈的基本操作

30 篇文章 0 订阅
29 篇文章 0 订阅
#include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100     //初始存储容量
#define  STACKINCERMENT 10   //存储空间增量

struct SqStack                    //顺序栈的定义
{
int *base;                        //栈底指针
int *top;                          //栈顶指针
int stacksize;                   //当前最大容量
};

bool InitStack(SqStack &S)                     //构造一个空栈
{
S.base=new int [STACK_INIT_SIZE];     //先给空栈分配一个初始空间
if(!S.base) return 0;                              //分配失败则返回0
S.top=S.base;                                      //栈顶指针初值指向栈底指针,代表空栈
S.stacksize=STACK_INIT_SIZE;             //赋予栈当前的最大容量值
return 1;
}

int GetTop(SqStack S,int &e)                         //若栈不空,则用e返回S的栈顶元素
{
if(S.top==S.base)     return 0;          //如果栈为空,则返回0
e=*(S.top-1);                                   //如果栈不为空,则用e返回栈顶元素
//cout<<e<<endl;    
return e;
}

bool Push(SqStack &S,int e)                  //插入元素e为新的栈顶元素
{
if(S.top-S.base>S.stacksize)           //如果栈满,则给栈追加存储空间
{
S.base=new int[STACKINCERMENT];
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCERMENT;
}
if(!S.base) return 0;                        //如果分配失败,则返回0

*S.top=e;                                      //把e的值赋给栈顶指针  ,可合并为 *S.top++=e;    (++运算级高于*)
++S.top;                                      //栈顶指针地址加一    
return 1;
}

bool Pop(SqStack &S)                      //若栈不空,则删除S的栈顶元素
{                                     
if(S.top==S.base)                         //若栈为空,返回0
return 0;
*(--S.top)=NULL;                                //把栈顶指针指向的值赋给e
return 1;
}
int main()
{
int e=3,x;                                      
SqStack s;                                  //定义一个栈s
InitStack(s);                                //初始化栈

Push(s,e);                                    //插入元素e为新的栈顶元素
GetTop(s,e);                                //用e返回栈顶元素
cout<<e<<endl;
Pop(s);                                        //删除栈顶元素
    GetTop(s,x);
cout<<x;

while(1){}
delete [] s.base;
return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个题怎么写题目描述 对于输入的任意一个非负十进制整数N,打印输出与其等值的m进制数。 本题特别说明: 1)我们以此题作为的入门级验证性实验,如果是实验课,请不要采用其它优化算法,老老实实按照数据结构(C语言版)教材p46-p48页上的类C代码进行改编。 2)关键是要仿照教材p46-p48页上的类C代码,编写初始化、入、出及判断空等函数。 3)类C代码99%可以照抄,主要是要注意类C代码各函数形参中的符号“&”--属于C++语言中的引用。在VC中调试时,如果文件扩展名为.c,则要遵循C语法规则,对于“&”不能照抄,“&”只能作为求地址运算符,因此,需要改编,实际上只要保证“传地址”就行了。如果文件扩展名为.cpp,则可按C++语法编写程序,“&”可作为引用运算符,因此“&”可以照抄...... 4)扩展名为.CPP的程序的总体框架,提示如下,仅供参考。 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; typedef struct { int *base; int *top; int stacksize; }SqStack; SqStack S; Status InitStack(SqStack &S) { //...... return OK; } Status Push(SqStack &S, int e) { //...... return OK; }//Push Status Pop(SqStack &S, int *e) { //...... return OK; }//Pop Status StackEmpty(SqStack &S) { //...... } void conversion() { int N,m; int e; InitStack(S); while(scanf("%d,%d",&N,&m)!=EOF) { //...... } } int main() { conversion(); return 0; }
最新发布
03-25

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值