实验报告
实验课程名称
数据结构
班级
09计科(1)班
实验项目名称
实验三 栈、队列的实现及应用
指导老师
祁文青
姓 名
***
学 号
**
评 分
实验地点
K4-206
实验日期
一、实验目的和
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际背景下灵活运用。
2、掌握栈和队列的特点,即先进后出与先进先出的原则。
3、掌握栈和队列的基本操作实现方法。
二、实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
任务1:实现栈的顺序存储和链式存储
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "iostream.h"
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
# define MAXQSIZE 100
# define OK 1
# define ERROR 0
typedef int SElemType;
typedef struct
{ SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
{ cout<
S.stacksize)
{ S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT*sizeof(SElemType)));
if(!S.base)
{ cout<>j;
for(n=0;n0;n--)
{ Pop(S,e);
printf("%d ",e);
}printf("\n");}
实验结果:
任务2、利用栈实现数制转换
#include
#include
#include
# include
# define STACK_INIT_SIZE 100
# define STACKINCREMENT 10
# define MAXQSIZE 100
# define OK 1
# define ERROR 0
typedef int SElemType;
typedef struct
{ SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S)
{ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base)
{ cout<S.stacksize)
{ S.base=(SElemType *)realloc(S.base,(S.stacksize+
STACKINCREMENT*sizeof(SElemType)));
if(!S.base)
{ cout<
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达式求值
#include
#include
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
using namespace std;
typedef double SElemType;
typedef struct SqStack
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
void InitStack (SqStack &S)
{
S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!S.base) exit (-1);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
bool GetTop (SqStack S,SElemType &e)
{
if(S.top==S.base)
return false;
e=*(S.top-1);
return true;
}
int Push(SqStack &S,SElemType e)
{
if(S.top-S.base>=S.stacksize)
{
S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base)
exit(-1);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return true;
}
int Pop(SqStack &S,SElemType &e)
{
if(S.top==S.base)
return false;
e=*--S.top;
return true ;
}
char Precede(char a1 ,char a2)
{
char r;
switch(a2)
{
case'+':
case'-':
if(a1=='('||a1=='#')
r='<';
else
r='>';
break;
case'*':
case'/':
if(a1=='*'||a1=='/'||a1==')')
r='>';
else
r='<';
break;
case'(':
if(a1==')')
{
cout<<"括号匹配错误!"<':
Pop(OPTR,e);
Pop(OPND,b);
Pop(OPND,a);
Push(OPND,Operate(a,e,b));
break;
}
}
else if(c>='0'&&c<='9'||c=='.')
{
int i=0;
while(c>='0'&&c<='9'||c=='.')
{
Data[i]=c;
i++;
c=getchar();
}
Data[i]='\0';
d=atof(Data);
Push(OPND,d);
}
else
{
cout<<"error!输入错误!"<next=NULL;
return (OK);
}
int DestroyQueue(LinkQueue &Q)
{ while(Q.front)
{ Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return (OK);
}
int EnQueue(LinkQueue &Q,QElemType e)
{ QNode *p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
{printf("Overflow !");
return (ERROR);
}
p->data=e;
p->next=NULL;
if(Q.front==NULL)
{ Q.front=Q.rear=p;
return (OK);
}
Q.rear->next=p;
Q.rear=p;
return (OK);
}
int DeQueue(LinkQueue &Q,QElemType &e)
{ if(Q.front==Q.rear)
{ printf("If it was deleted, it's empty !");
return (ERROR);
}
QNode *p;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
free(p);
return (OK);
}
int QueueTraverse(LinkQueue Q,void(*vi)(QElemType))
{
QueuePtr p;
p=Q.front->next;
while(p)
{
vi(p->data);
p=p->next;
}
printf("\n");
return OK;
}
void visit(QElemType i)
{
printf("%d",i);
}
void main()
{
int i,j;
int e;
QElemType d;
LinkQueue q;
i=InitQueue(q);
if(i)
for(j=1;j<=8;j++)
{
cin>>e;
EnQueue(q,e);
}
QueueTraverse(q,visit);
DeQueue(q,d);
printf("删除了队头元素%d\n",d);
DestroyQueue(q);
printf("销毁队列后,q.front=%u q.rear=%u\n",q.front, q.rear);
}
实验结果:
三、结论
1、掌握了栈和队列的顺序存储结构和链式存储结构,
2、掌握栈和队列的特点,即先进后出与先进先出的原则,掌握栈和队列的基本操作实现方法。。
3、了解了队列的指针。
四、教师批阅
3