数据结构C语言版顺序栈上机实验
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
@date: 2004
@description:
*****************************************************/
#include <stdio.h>
#include <stdlib.h> //for system()
#include "stack.h" //链栈
@object:
[实验目的]
采用顺序存储结构实现栈的基本操作
[实验提示]
1.在stack.h中实现栈的基本操作
2.在dsp0302.cpp中编写适当的代码,进行测试
@include:
stack.h[*]
栈的顺序实现
@usage:
请查看"TO-DO列表",根据要求完成代码
@copyright: BTC 2004,ZhuangBo
}
printf("\n出栈结果:");
while(!StackEmpty(s)) {
Pop(s,x);
printf("%4d",x);
}
//-------------------------------------
// TODO (#1#):其它测试程序
//-------------------------------------
///////////////////////////////////////////////////////////
//顺序栈的基本操作的实现
//构造一个空栈S
StatusInitStack(SqStack&S)
{
// TODO (#1#):构造一个空栈S
return ERROR;
//-------------------------------------
//构造一个空栈S
StatusInitStack(LinkStack&S);
//销毁栈S
StatusDestroyStack(LinkStack&S);
//将栈S清空
StatusClearStack(LinkStack&S);
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(LinkStackS);
}
printf("\n出栈结果:");
while(!StackEmpty(s)) {
Pop(s,x);
printf("%4d",x);
}
//-------------------------------------
// TODO (#1#):其它测试程序
//-------------------------------------
//-------------------------------------
}
//将栈S清空
StatusClearStack(LinkStack&S)
{
// TODO (#1#):将栈S清空,释放所有结点
return ERROR;
//-------------------------------------
}
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(LinkStackS)
{
// TODO (#1#):若栈S为空返回TRUE,否则FALSE
return TRUE;
//-------------------------------------
}
//返回栈S中的元素个数
intStackLength(LinkStackS)
@author:ZhuangBo
@date: 2004
@description:
*****************************************************/
#include <stdio.h>
#include <stdlib.h> //for system()
#include "stack.h" //forSqStack
{
// TODO (#1#):构造一个空栈S,不带头结点
return ERROR;
//-------------------------------------
}
//销毁栈S
StatusDestroyStack(LinkStack&S)
{源自文库
// TODO (#1#):销毁栈S,相当于清空栈
return ERROR;
StatusDestroyStack(SqStack&S);
//将栈S清空
StatusClearStack(SqStack&S);
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(SqStackS);
//返回栈S中的元素个数
intStackLength(SqStackS);
}
//S出栈用e返回出栈元素
//前提:栈S存在且不空
Status Pop(LinkStack&S,ElemType&e)
{
// TODO (#1#):若栈S不空,则删除栈顶元素用e返回
return ERROR;
//-------------------------------------
}
#ifdef ELEMTYPE_TAG
实验3-1链栈
[目的]掌握链栈的实现和简单的应用。
[源代码]
/****************************************************
@title:数据结构实验
@name: <实验3-1>栈的链式存储结构
@object:
[实验目的]
采用链式存储结构实现栈的基本操作
[实验提示]
#undef ElemType
#undefELEMTYPE_TAG
#endif
#endif
实验3-2顺序栈
[目的]掌握顺序栈的实现和简单的应用。
[源代码]
/****************************************************
@title:数据结构实验
@name: <实验3-2>栈的顺序存储结构
// TODO (#1#):将栈S清空,释放所有结点
return ERROR;
//-------------------------------------
}
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(SqStackS)
{
// TODO (#1#):若栈S为空返回TRUE,否则FALSE
DestroyStack(s); //销毁栈
system("PAUSE");
return 0;
}
/*
Name:栈的链式实现
Copyright:
Author:
Date:
Description:
*/
#ifndefSTACK_H_INCLUDED
#define STACK_H_INCLUDED
#include "ds.h" //forStatus,OK...
return ERROR;
//-------------------------------------
}
//元素e入栈S
Status Push(LinkStack&S,ElemTypee)
{
// TODO (#1#):插入元素e作为新的栈顶
return ERROR;
//-------------------------------------
1.在stack.h中实现栈的基本操作,
在链式存储结构中可是省去头结点。
2.在dsp0301.cpp中编写适当的代码,进行测试
@include:
stack.h[*]
栈的链式实现
@usage:
请查看"TO-DO列表",根据要求完成代码
@copyright: BTC 2004,ZhuangBo
@author:ZhuangBo
//前提:栈S存在且不空
Status Pop(LinkStack&S,ElemType&e);
///////////////////////////////////////////////////////////
//链栈的基本操作的实现
//构造一个空栈S
StatusInitStack(LinkStack&S)
{
// TODO (#1#):返回栈S中的元素个数
return 0;
//-------------------------------------
}
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(LinkStackS,ElemType&e)
{
// TODO (#1#):若栈S不空,则用e返回栈顶元素
intstacksize; //当前已分配的存储空间(元素个数)
}SqStack;
///////////////////////////////////////////////////////////
//顺序栈的基本操作声明
//构造一个空栈S
StatusInitStack(SqStack&S);
//销毁栈S
DestroyStack(s); //销毁栈
system("PAUSE");
return 0;
}
/*
Name:顺序栈的实现
Copyright:
Author:
Date:
Description:
*/
#ifndefSTACK_H_INCLUDED
#define STACK_H_INCLUDED
#include "ds.h" //forStatus,OK...
//测试链栈的主程序
intmain()
{
LinkStacks;
intx;
//输入若干正整数以0结束,依次入栈,然后依次出栈并打印
InitStack(s);
printf("输入若干正整数以0结束:");
scanf("%d",&x);
while(x!=0) {
Push(s,x);
scanf("%d",&x);
#ifndefElemType
#defineElemTypeint/*数据元素类型默认为int*/
#define ELEMTYPE_TAG
#endif
///////////////////////////////////////////////////////////
//链栈的存储结构定义
typedefstructLNode{
//测试顺序栈的主程序
intmain()
{
SqStacks;
intx;
//输入若干正整数以0结束,依次入栈,然后依次出栈并打印
InitStack(s);
printf("输入若干正整数以0结束:");
scanf("%d",&x);
while(x!=0) {
Push(s,x);
scanf("%d",&x);
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(SqStackS,ElemType&e);
//元素e入栈S
Status Push(SqStack&S,ElemTypee);
//S出栈用e返回出栈元素
//前提:栈S存在且不空
Status Pop(SqStack&S,ElemType&e);
}
//销毁栈S
StatusDestroyStack(SqStack&S)
{
// TODO (#1#):销毁栈S,相当于清空栈
return ERROR;
//-------------------------------------
}
//将栈S清空
StatusClearStack(SqStack&S)
{
//顺序栈的存储结构定义
#define STACK_INIT_SIZE 100 /*存储空间初始分配容量*/
#define STACKINCREMENT 10 /*存储空间分配的增量*/
typedefstruct{
ElemType*base; //在构造栈之前和销毁栈之后,base为NULL
ElemType*top; //栈顶指针
//返回栈S中的元素个数
intStackLength(LinkStackS);
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(LinkStackS,ElemType&e);
//元素e入栈S
Status Push(LinkStack&S,ElemTypee);
//S出栈用e返回出栈元素
#ifndefElemType
#defineElemTypeint/*数据元素类型默认为int*/
#define ELEMTYPE_TAG
#endif
#defineSElemTypeElemType
///////////////////////////////////////////////////////////
ElemTypedata;
structLNode*next;
}LNode, *LinkList;
typedefLinkListLinkStack; //链栈类型
///////////////////////////////////////////////////////////
//链栈的基本操作声明
@description:
*****************************************************/
#include <stdio.h>
#include <stdlib.h> //for system()
#include "stack.h" //链栈
@object:
[实验目的]
采用顺序存储结构实现栈的基本操作
[实验提示]
1.在stack.h中实现栈的基本操作
2.在dsp0302.cpp中编写适当的代码,进行测试
@include:
stack.h[*]
栈的顺序实现
@usage:
请查看"TO-DO列表",根据要求完成代码
@copyright: BTC 2004,ZhuangBo
}
printf("\n出栈结果:");
while(!StackEmpty(s)) {
Pop(s,x);
printf("%4d",x);
}
//-------------------------------------
// TODO (#1#):其它测试程序
//-------------------------------------
///////////////////////////////////////////////////////////
//顺序栈的基本操作的实现
//构造一个空栈S
StatusInitStack(SqStack&S)
{
// TODO (#1#):构造一个空栈S
return ERROR;
//-------------------------------------
//构造一个空栈S
StatusInitStack(LinkStack&S);
//销毁栈S
StatusDestroyStack(LinkStack&S);
//将栈S清空
StatusClearStack(LinkStack&S);
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(LinkStackS);
}
printf("\n出栈结果:");
while(!StackEmpty(s)) {
Pop(s,x);
printf("%4d",x);
}
//-------------------------------------
// TODO (#1#):其它测试程序
//-------------------------------------
//-------------------------------------
}
//将栈S清空
StatusClearStack(LinkStack&S)
{
// TODO (#1#):将栈S清空,释放所有结点
return ERROR;
//-------------------------------------
}
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(LinkStackS)
{
// TODO (#1#):若栈S为空返回TRUE,否则FALSE
return TRUE;
//-------------------------------------
}
//返回栈S中的元素个数
intStackLength(LinkStackS)
@author:ZhuangBo
@date: 2004
@description:
*****************************************************/
#include <stdio.h>
#include <stdlib.h> //for system()
#include "stack.h" //forSqStack
{
// TODO (#1#):构造一个空栈S,不带头结点
return ERROR;
//-------------------------------------
}
//销毁栈S
StatusDestroyStack(LinkStack&S)
{源自文库
// TODO (#1#):销毁栈S,相当于清空栈
return ERROR;
StatusDestroyStack(SqStack&S);
//将栈S清空
StatusClearStack(SqStack&S);
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(SqStackS);
//返回栈S中的元素个数
intStackLength(SqStackS);
}
//S出栈用e返回出栈元素
//前提:栈S存在且不空
Status Pop(LinkStack&S,ElemType&e)
{
// TODO (#1#):若栈S不空,则删除栈顶元素用e返回
return ERROR;
//-------------------------------------
}
#ifdef ELEMTYPE_TAG
实验3-1链栈
[目的]掌握链栈的实现和简单的应用。
[源代码]
/****************************************************
@title:数据结构实验
@name: <实验3-1>栈的链式存储结构
@object:
[实验目的]
采用链式存储结构实现栈的基本操作
[实验提示]
#undef ElemType
#undefELEMTYPE_TAG
#endif
#endif
实验3-2顺序栈
[目的]掌握顺序栈的实现和简单的应用。
[源代码]
/****************************************************
@title:数据结构实验
@name: <实验3-2>栈的顺序存储结构
// TODO (#1#):将栈S清空,释放所有结点
return ERROR;
//-------------------------------------
}
//若栈S为空返回TRUE,否则FALSE
StatusStackEmpty(SqStackS)
{
// TODO (#1#):若栈S为空返回TRUE,否则FALSE
DestroyStack(s); //销毁栈
system("PAUSE");
return 0;
}
/*
Name:栈的链式实现
Copyright:
Author:
Date:
Description:
*/
#ifndefSTACK_H_INCLUDED
#define STACK_H_INCLUDED
#include "ds.h" //forStatus,OK...
return ERROR;
//-------------------------------------
}
//元素e入栈S
Status Push(LinkStack&S,ElemTypee)
{
// TODO (#1#):插入元素e作为新的栈顶
return ERROR;
//-------------------------------------
1.在stack.h中实现栈的基本操作,
在链式存储结构中可是省去头结点。
2.在dsp0301.cpp中编写适当的代码,进行测试
@include:
stack.h[*]
栈的链式实现
@usage:
请查看"TO-DO列表",根据要求完成代码
@copyright: BTC 2004,ZhuangBo
@author:ZhuangBo
//前提:栈S存在且不空
Status Pop(LinkStack&S,ElemType&e);
///////////////////////////////////////////////////////////
//链栈的基本操作的实现
//构造一个空栈S
StatusInitStack(LinkStack&S)
{
// TODO (#1#):返回栈S中的元素个数
return 0;
//-------------------------------------
}
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(LinkStackS,ElemType&e)
{
// TODO (#1#):若栈S不空,则用e返回栈顶元素
intstacksize; //当前已分配的存储空间(元素个数)
}SqStack;
///////////////////////////////////////////////////////////
//顺序栈的基本操作声明
//构造一个空栈S
StatusInitStack(SqStack&S);
//销毁栈S
DestroyStack(s); //销毁栈
system("PAUSE");
return 0;
}
/*
Name:顺序栈的实现
Copyright:
Author:
Date:
Description:
*/
#ifndefSTACK_H_INCLUDED
#define STACK_H_INCLUDED
#include "ds.h" //forStatus,OK...
//测试链栈的主程序
intmain()
{
LinkStacks;
intx;
//输入若干正整数以0结束,依次入栈,然后依次出栈并打印
InitStack(s);
printf("输入若干正整数以0结束:");
scanf("%d",&x);
while(x!=0) {
Push(s,x);
scanf("%d",&x);
#ifndefElemType
#defineElemTypeint/*数据元素类型默认为int*/
#define ELEMTYPE_TAG
#endif
///////////////////////////////////////////////////////////
//链栈的存储结构定义
typedefstructLNode{
//测试顺序栈的主程序
intmain()
{
SqStacks;
intx;
//输入若干正整数以0结束,依次入栈,然后依次出栈并打印
InitStack(s);
printf("输入若干正整数以0结束:");
scanf("%d",&x);
while(x!=0) {
Push(s,x);
scanf("%d",&x);
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(SqStackS,ElemType&e);
//元素e入栈S
Status Push(SqStack&S,ElemTypee);
//S出栈用e返回出栈元素
//前提:栈S存在且不空
Status Pop(SqStack&S,ElemType&e);
}
//销毁栈S
StatusDestroyStack(SqStack&S)
{
// TODO (#1#):销毁栈S,相当于清空栈
return ERROR;
//-------------------------------------
}
//将栈S清空
StatusClearStack(SqStack&S)
{
//顺序栈的存储结构定义
#define STACK_INIT_SIZE 100 /*存储空间初始分配容量*/
#define STACKINCREMENT 10 /*存储空间分配的增量*/
typedefstruct{
ElemType*base; //在构造栈之前和销毁栈之后,base为NULL
ElemType*top; //栈顶指针
//返回栈S中的元素个数
intStackLength(LinkStackS);
//用e返回栈顶元素
//前提:栈S存在且不空
StatusGetTop(LinkStackS,ElemType&e);
//元素e入栈S
Status Push(LinkStack&S,ElemTypee);
//S出栈用e返回出栈元素
#ifndefElemType
#defineElemTypeint/*数据元素类型默认为int*/
#define ELEMTYPE_TAG
#endif
#defineSElemTypeElemType
///////////////////////////////////////////////////////////
ElemTypedata;
structLNode*next;
}LNode, *LinkList;
typedefLinkListLinkStack; //链栈类型
///////////////////////////////////////////////////////////
//链栈的基本操作声明