一道数据结构题目(高手进)根据下面给出的栈的存储结构定义//定义栈的存储结构typedef struct StackNode{ ElemType data; //存放数据 struct StackNode * next; //指向下一个结点}StackNode;typedef struct{
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/03 18:15:58
![一道数据结构题目(高手进)根据下面给出的栈的存储结构定义//定义栈的存储结构typedef struct StackNode{ ElemType data; //存放数据 struct StackNode * next; //指向下一个结点}StackNode;typedef struct{](/uploads/image/z/7804989-45-9.jpg?t=%E4%B8%80%E9%81%93%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E9%A2%98%E7%9B%AE%EF%BC%88%E9%AB%98%E6%89%8B%E8%BF%9B%EF%BC%89%E6%A0%B9%E6%8D%AE%E4%B8%8B%E9%9D%A2%E7%BB%99%E5%87%BA%E7%9A%84%E6%A0%88%E7%9A%84%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84%E5%AE%9A%E4%B9%89%2F%2F%E5%AE%9A%E4%B9%89%E6%A0%88%E7%9A%84%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84typedef+struct+StackNode%7B+++ElemType+data%3B+++++%2F%2F%E5%AD%98%E6%94%BE%E6%95%B0%E6%8D%AE+++struct+StackNode+%2A+next%3B++%2F%2F%E6%8C%87%E5%90%91%E4%B8%8B%E4%B8%80%E4%B8%AA%E7%BB%93%E7%82%B9%7DStackNode%3Btypedef+struct%7B)
一道数据结构题目(高手进)根据下面给出的栈的存储结构定义//定义栈的存储结构typedef struct StackNode{ ElemType data; //存放数据 struct StackNode * next; //指向下一个结点}StackNode;typedef struct{
一道数据结构题目(高手进)
根据下面给出的栈的存储结构定义
//定义栈的存储结构
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
一道数据结构题目(高手进)根据下面给出的栈的存储结构定义//定义栈的存储结构typedef struct StackNode{ ElemType data; //存放数据 struct StackNode * next; //指向下一个结点}StackNode;typedef struct{
//LStack.h
//堆栈的链式存储结构
#include
#include
//定义结点结构体
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;
if(NULL==(snp=(StackNode *)malloc(sizeof(StackNode)))) //申请新结点空间
return 0;
snp->data=item;
snp->next=S.top;
S.top=snp;
return 1;
}
//出栈
int Pop(LinkStack &S)
{
ElemType reData;
StackNode *indexp;
if(!isEmpty(S)) //栈空退出
return 0;
reData=S.top->data; //取出数据域存储的数据
indexp=S.top; //保存当前栈顶结点
S.top=S.top->next; //栈顶变为top的后继结点
free(indexp); //释放原栈顶结点空间
return reData; //返回栈顶数据
}
//取栈顶数据
int GetTop(LinkStack &S)
{
ElemType reData;
if(!isEmpty(S)) //栈空退出
return 0;
reData=S.top->data; //取出数据
return reData;
}
//清空栈
void MakeEmpty(LinkStack &S)
{
StackNode *p,*pp;
p=S.top;
while(p!=NULL)
{
pp=p;
p=p->next;
free(pp);
}
}
LStack.cpp
#include
typedef int ElemType;
#include "LStack.h"
int main() //测试堆栈的链式存储结构
{
LinkStack T;
int a[10]={1,3,5,7,9,11,13,15,17,19};
InitStack(T); //初始化栈
for(int i=0;i