一道数据结构题目(高手进)

来源:百度知道 编辑:UC知道 时间:2024/06/04 09:41:33
根据下面给出的栈的存储结构定义
//定义栈的存储结构
typedef struct StackNode
{
ElemType data; //存放数据
struct StackNode * next; //指向下一个结点
}StackNode;
typedef struct
{
StackNode * top; // 栈顶指针
}LinkStack;
实现下列操作:
void InitStack(LinkStack &S); // 栈的初始化
void Push(const int &item,LinkStack &S); // 入栈
char Pop(LinkStack &S); // 出栈
char GetTop(LinkStack &S); // 取栈顶元素
int IsEmpty(LinkStack &S); // 判断栈是否为空
void MakeEmpty(LinkStack &S); // 清空栈

2、 实验要求
(1)、用C语言编程实现上述实验内容中的结构定义和算法。
(2)、要有main()函数,并且在main()函数中使用检测数据调用上述算法。
不是的,我已经做出一半来了,老是出一大些错误,想要个现成的参照参照。
最后结果如图片所示:http://xsh.ncist.edu.cn/ds.jpg

//LStack.h

//堆栈的链式存储结构

#include<malloc.h>
#include<process.h>

//定义结点结构体
typedef struct StackNode
{
ElemType data; //数据域
struct StackNode *next; //指针域
}StackNode;

//定义栈顶指针
typedef struct
{
StackNode *top; //栈顶指示器
}LinkStack;

//初始化
void InitStack(LinkStack &S)
{
if(NULL==(S.top=(StackNode *)malloc(sizeof(StackNode)))) //申请栈顶结点空间
exit(0); //申请失败推出程序

S.top->next=NULL; //申请成功栈顶结点指针域初始化为空
S.top->data=NULL; //数据域初始化为NULL
}

//判断栈是否为空
int isEmpty(LinkStack &S)
{
if(NULL==S.top->next&&NULL==S.top->data) //栈顶没有后继结点表明为空栈
return 0; //返回0

return 1; //非空时返回1
}

//入栈
int Push(const ElemType &item,LinkStack &S) //此处最好把item定义为抽象数据类型ElemType
{
StackNode *snp