数据结构实验二报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 栈和队列应用
实验目的
1.会定义顺序栈和链栈的结点类型。
2.掌握栈的插入和删除结点在操作上的特点。
3.熟悉对栈的一些基本操作和具体的函数定义。
4.会定义顺序队列和链队列的结点类型。
实验内容
1.该程序的功能是实现顺序栈的定义和操作。包括定义的栈结构类型以及对每一种栈操作的具体的函数定义和主函数。
2.利用栈实现应用后缀表示计算表达式的值。
3.回文游戏。
实验清单
1.
#include
typedef int DataType; //定义DataType SElemType为int型
typedef int SElemType;
#define MAXSIZE 100 //定义栈的结点类型
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SeqStack;
void Init(SeqStack *S) { //初始化顺序栈
S->base=(SElemType*)malloc(MAXSIZE*sizeof (SElemType));
if(S->base==0) printf("存储分配失败。\n");
else {S->top=S->base;S->stacksize=MAXSIZE;}
}
void Push(SeqStack *S,DataType x){ //入栈
if(S->top-S->base==S->stacksize)
printf("栈满,无法入栈。\n");
else {*S->top=x; S->top++;}
}
void Pop(SeqStack *S,DataType e){ //将栈顶元素弹出,用e储存if(S->top=S->base) printf("空栈。\n");
else {--S->top;e=*S->top;}
}
DataType GetTop(SeqStack *S){ //取栈顶元素
if(S->top==S->base) {printf("空栈。\n"); return 0;}
else { return *(S->top-1);}
}
void Print(SeqStack *S){ //输出栈中元素
if(S->top==S->base) {printf("空栈。\n");}
else{
while(S->top!=S->base) printf("%4d ",S->top-1);
}
}
void main() //主函数
{ DataType e;
SeqStack *S;
Init(S); //初始化栈S
Push(S,1); //将1入栈
Push(S,2); //将2入栈
Push(S,3); //将3入栈
Push(S,4); //将4出栈
Pop(S,&e); //栈顶元素4出栈
GetTop(S); //取栈顶元素3
Print(S); //输出栈中元素3 2 1
}
2.
#include
#include
#include
using namespace std;
typedef char DataType; //定义DataType为char型
#define MAXSIZE 100
typedef struct //定义栈的结点类型
{
DataType *base;
DataType *top;
int stacksize;
}SqStack;
void InitStack (SqStack &S) //初始化顺序栈
{
S.base=new char[20];
if(!S.base)
exit(1);
S.top=S.base;
S.stacksize=20;
}
DataType EvaluateExpession(SqStack &S,DataType ch[]) {
int m,n,t,e,i=0;
if(S.top-S.base==S.stacksize) exit(1);
while(ch[i]!='\0')
{
if(ch[i]='+'||'-'||'*'||'/')
{
m=*--S.top;
n=*--S.top;
if(ch[i]='+')
t=m+n;
else if(ch[i]=='-')
t=n-m;
else if(ch[i]=='*')
t=n*m;
else if(ch[i]=='/')
t=n/m;
*S.top++=t;
}
else
*S.top++=ch[i];
}
e=*--S.top;
return(e);
}
void main(){
DataType ch[20];
cout<<"please input the string:"< cin>>ch; SqStack S; InitStack (S); cout< } 3. #include typedef int DataType; //定义DataType为int型 typedef char SElemType;//定义SElemType为char类型 #define MAXSIZE 100 typedef struct{ //定义栈的结点类型 DataType *base; DataType *top; int stacksize; }SeqStack; DataType Init(SeqStack *S) { //初始化顺序栈 S->base=(DataType*)malloc(MAXSIZE*sizeof (DataType)); if(S->base==0) printf("存储分配失败。\n"); else {S->top=S->base;S->stacksize=MAXSIZE;} return 1; } DataType Push(SeqStack *S,SElemType x){ //入栈if(S->top-S->base==S->stacksize) printf("栈满,无法入栈。\n"); else {*S->top=x; S->top++;} return 1;