当前位置:网站首页>Basic operations of 8583 sequential stack
Basic operations of 8583 sequential stack
2022-08-02 14:18:00 【weixin_50862344】
题干
(go see for yourself)
代码实现
#include<malloc.h>
#include<stdio.h>
#define OK 1
#define ERROR 0
#define STACK_INIT_SIZE 100 // 存储空间初始分配量
#define STACKINCREMENT 10 // 存储空间分配增量
typedef int SElemType; // 定义栈元素类型
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
struct SqStack
{
SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
SElemType *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}; // 顺序栈
Status InitStack(SqStack &S)
{
// 请补全代码
S.base= (SElemType*)malloc(STACK_INIT_SIZE *sizeof(SElemType*));
if(!S.base)
return ERROR;//Forgot to add this paragraph at first
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
// 构造一个空栈S,该栈预定义大小为STACK_INIT_SIZE
return OK;//Forgot to add this paragraph at first,通过不了
}
Status Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=STACK_INIT_SIZE)//扩展
{
S.base= (SElemType*)malloc((STACK_INIT_SIZE+STACKINCREMENT) *sizeof(SElemType*));
if(!S.base) return ERROR;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top=e;
S.top++;
// 在栈S中插入元素e为新的栈顶元素
// 请补全代码
}
Status Pop(SqStack &S,SElemType &e)
{
if(S.base==S.top) return ERROR;
e=*(S.top-1);//TOPAlways be next to the top element on the stack
S.top--;
return OK;
// 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
// 请补全代码
}
Status GetTop(SqStack S,SElemType &e)
{
if(S.base==S.top) return ERROR;
e=*(S.top-1);
return OK;
// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
// 请补全代码
}
int StackLength(SqStack S)
{
if(S.base==S.top)return 0;
int n;
n=S.top-S.base;
return n;
//return (int)(S.top-S.base);
// 返回栈S的元素个数
// 请补全代码
}
Status StackTraverse(SqStack S)
{
// 从栈顶到栈底依次输出栈中的每个元素
SElemType *p = (SElemType *)malloc(sizeof(SElemType));
p = S.top; //请填空
if(S.top==S.base)printf("The Stack is Empty!"); //请填空
else
{
printf("The Stack is: ");
p--;//小细节
while(p>=S.base) //请填空
{
//请填空
printf("%d ", *p);
p--;
}
}
printf("\n");
return OK;
}
int main()
{
int a;
SqStack S;
SElemType x, e;
if(InitStack(S)) // Determine whether the sequence table is created successfully,请填空
{
printf("A Stack Has Created.\n");
}
while(1)
{
printf("1:Push \n2:Pop \n3:Get the Top \n4:Return the Length of the Stack\n5:Load the Stack\n0:Exit\nPlease choose:\n");
scanf("%d",&a);
switch(a)
{
case 1: scanf("%d", &x);
if(!Push(S,x)) printf("Push Error!\n"); // 判断Push是否合法,请填空
else printf("The Element %d is Successfully Pushed!\n", x);
break;
case 2: if(!Pop(S,e)) printf("Pop Error!\n"); // 判断Pop是否合法,请填空
else printf("The Element %d is Successfully Poped!\n", e);
break;
case 3: if(!GetTop(S,e))printf("Get Top Error!\n"); // 判断Get Top是否合法,请填空
else printf("The Top Element is %d!\n", e);
break;
case 4: printf("The Length of the Stack is %d!\n",StackLength(S)); //请填空
break;
case 5:StackTraverse(S); //请填空
break;
case 0: return 1;
}
}
}
小细节
- Operates on the base address each time(包括扩展,创建…),After the operation is completed, it is necessary to judge whether it is successful or not
(Although it doesn't seem to matteroj结果
if(!S.base) return ERROR;
- 进栈push中
*S.top=e;
top是栈顶指针,可以理解为:*Manipulate it to look liken一样的变量
- Status StackTraverse(SqStack S)函数中
SElemType *p = ______________________ //请填空
其实只要写 *SElemType p;
oj就可以通过
边栏推荐
- 8576 顺序线性表的基本操作
- 专访|带着问题去学习,Apache DolphinScheduler 王福政
- 数据机构---第六章图---图的遍历---选择题
- 如何解决1045无法登录mysql服务器
- 瑞吉外卖笔记——第08讲读写分离
- Flask框架深入二
- Flask框架深入一
- Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng
- About the development forecast of the market outlook?2021-05-23
- 你接受不了60%的暴跌,就没有资格获得6000%的涨幅 2021-05-27
猜你喜欢
你接受不了60%的暴跌,就没有资格获得6000%的涨幅 2021-05-27
paddleocr window10初体验
Flask框架的搭建及入门
The bad policy has no long-term impact on the market, and the bull market will continue 2021-05-19
Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng
方舟生存进化淘宝面板服务器是怎么一回事?
Data Organization---Chapter 6 Diagram---Graph Traversal---Multiple Choice Questions
8580 合并链表
redis延时队列
[ROS]ROS常用工具介绍(待续)
随机推荐
未来的金融服务永远不会停歇,牛市仍将继续 2021-05-28
你接受不了60%的暴跌,就没有资格获得6000%的涨幅 2021-05-27
Flask-RESTful请求响应与SQLAlchemy基础
Mysql's case the when you how to use
关于Google词向量模型(googlenews-vectors-negative300.bin)的导入问题
网络安全第一次作业
关于市场后市的发展预测? 2021-05-23
机器学习——交叉验证法
Configure zabbix auto-discovery and auto-registration.
redis分布式锁和看门狗的实现
MobileNet ShuffleNet & yolov5替换backbone
智能指针-使用、避坑和实现
第七单元 ORM表关系及操作
uview 2.x版本 tabbar在uniapp小程序里头点击两次才能选中图标
Cloin 控制台乱码
FFmpeg AVPacket详解
C language improvement (3)
MySQL数据库语法格式
logback源码阅读(二)日志打印,自定义appender,encoder,pattern,converter
replay视频播放器_怎么让手机音乐跟视频一起放