一道数据结构题目(高手进)
来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/11 21:51:20
一道数据结构题目(高手进)
根据下面给出的栈的存储结构定义
//定义栈的存储结构
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
{
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
#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
//堆栈的链式存储结构
#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