顺序堆栈(数组)
来源:互联网 发布:电梯运行优化 编辑:程序博客网 时间:2024/06/06 05:01
完成品代码:
#include<stdio.h>
#include<stdlib.h>typedef struct Stack * SNode;
struct Stack {
int *Data; //储存数据的数组
int Top; //指针当前停留位置
int MaxSize; //数组最大值
};
SNode CreateStack(int MaxSize); //创建堆栈函数
bool IsFull(SNode S); //检查栈是否满
bool Push(int data1, SNode S); //将data1数据压入堆栈
bool IsEmpty(SNode S); //判断是否为空函数
int Pop(SNode S); //出栈函数
int main()
{
SNode S;
S = CreateStack(10);
printf("%d %d\n", S->Top, S->MaxSize);
if (!IsFull(S)) printf("栈未满\n");
while (!IsFull(S))
{
int data;
scanf("%d", &data);
Push(data, S);
}
while (!IsEmpty(S))
{
int data = Pop(S);
if (data) printf("出栈:%d\n", data);
}
return 0;
}
SNode CreateStack(int MaxSize)
{
SNode S; //一个堆栈结构
S = (SNode)malloc(sizeof(struct Stack));
S->MaxSize = MaxSize; //赋予最大值
S->Top = -1; //赋予数组指针头为-1
S->Data = (int *)malloc(sizeof(MaxSize)*MaxSize); //为数组分配空间
return S;
}
bool IsFull(SNode S)
{
if (S->Top == S->MaxSize - 1) return true;
else return false;
}
bool Push(int data1, SNode S)
{
if (IsFull(S))
{
printf("栈已满 入栈失败:%d\n", data1);
system("pause");
return false;
}
S->Top++;
S->Data[S->Top] = data1;
return true;
}
bool IsEmpty(SNode S)
{
if (S->Top == -1) return true;
else return false;
}
int Pop(SNode S) //出栈函数
{
if (IsEmpty(S))
{
printf("栈为空\n");
return 0;
}
int data1;
data1 = S->Data[S->Top--];
return data1;
}
VS编译环境下出现问题代码:
问题函数1:
bool IsFull(SNode S)
{
if (S->Top == S->MaxSize) return true;
else return false;
}
此时if语句不成立,函数却返回true
问题函数1没有问题,问题出在问题函数2中定义了返回了一个函数内局部变量的值,结果被销毁,使指针指向的值中S->Top=S->MaxSize
问题函数2:
SNode CreateStack(int MaxSize)
{
struct Stack S; //一个堆栈结构
S.MaxSize = MaxSize; //赋予最大值
S.Top = -1; //赋予数组指针头为-1
S.Data = (int *)malloc(sizeof(MaxSize)*MaxSize); //为数组分配空间
return &S;
}
创建函数直接申明了一个局部变量堆栈结构,在函数结束后直接被销毁,但在结束后的main函数中的
printf("%d %d\n", S->Top,S->MaxSize);中却能够输出数据函数中定义的默认数据?
阅读全文
0 0
- 顺序堆栈(数组)
- 顺序结构(数组)的堆栈
- 堆栈的顺序存储(数组)
- 数据结构与算法-----堆栈-使用数组(顺序结构)实现
- 用数组实现堆栈顺序存储
- 堆栈(数组实现)
- 顺序堆栈
- 顺序堆栈
- 顺序堆栈
- 13数组实现顺序堆栈的基本操作
- 15数组实现顺序堆栈的括号匹配问题
- 数组、链表、堆栈和队列、线性表和顺序表
- 数组实现堆栈(sbds)
- 数据结构学习之堆栈(顺序存储)
- 顺序存储堆栈
- 数据结构--顺序堆栈
- 顺序堆栈.c
- java数据结构之堆栈思想(数组)
- 16秋计算机JAVA第三节课作业(钟永钜) 4~6题
- Java的Json解析包FastJson使用
- CSS中定义变量,并使用变量设置属性值
- Python模块_PyLibTiff读取tif文件
- Object Detection论文笔记(4)
- 顺序堆栈(数组)
- 从数据库得到数据导出指定格式的xml文件,上传到NC接口,返回回执到本地一个xml文件
- 栈的压入、弹出序列
- Inno Setup入门(五)——添加readme文件
- JAVA_int类型数据精度高于float低于double
- 下面总结 8 组常用的Eclipse快捷键
- Java发送邮件的简单实现
- kickstart无人值守安装
- Java快速排序