河南工业大学实验报告_实验一 线性结构(二)--栈和队列的操作

xxxx 大学实验报告

课程名称 数据结构 实验项目 实验一 线性结构(二) ——栈和队列的操作

院 系 信息学院计类系 专业班级 计类1501 姓 名 学 号

指导老师 日 期

批改日期 成 绩

一 实验目的 1. 熟练掌握栈的存储结构及相关典型操作。

2. 熟练掌握队列的存储结构及相关典型操作。

二 实验内容及要求

实验内容:

1. 建立链式栈,实现栈的初始化、进栈、出栈等典型操作。

2. 建立循环队列,实现队列的初始化、进队、出队等典型操作。

实验要求: 1. 键盘输入数据;

2. 屏幕输出运行结果。

3. 要求记录实验源代码及运行结果。

4. 运行环境:VC++6.0

三 实验过程及运行结果

1、 循环队列

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define MAXQSIZE 100 //最大队列长度

typedef struct

{

int *base; //初始化的动态分配存储空间

int front;

int rear;

}SqQueue;

//初始化队列

int InitQueue(SqQueue Q)

{

}

//入队操作

int EnQueue(SqQueue Q)

{

}

//出队操作 int e; if ((Q.rear+1)%MAXQSIZE==Q.front) //判断队满 { } printf("请输入入队元素:"); scanf("%d",&e); Q.base[Q.rear]=e; //入队 Q.rear =(Q.rear+1)%MAXQSIZE; //队尾指针后移 return OK; printf("队列已满, 不能入队\n"); return ERROR; Q.base=(int*)malloc(MAXQSIZE*sizeof(int)); if (!Q.base)exit(OVERFLOW); //存储分配失败 Q.front=Q.rear=0; return OK;

int DeQueue(SqQueue Q)

{

}

//队列长度

int QueueLength(SqQueue Q)

{

}

//队列遍历

int QueueTraverse(SqQueue Q)

{

printf("遍历结果为:"); while (Q.front!=Q.rear) { } printf ("\n"); printf("%d ",Q.base[Q.front]); Q.front=(Q.front+1)%MAXQSIZE; return((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE); int e; if(Q.front==Q.rear) //判断队空 { } e=Q.base[Q.front]; //队头出队 printf("输出的出队元素为:"); printf("%d\n",e); Q.front=(Q.front+1)%MAXQSIZE; //队头下表后移 return OK; printf("队列已为空\n"); return ERROR;

} return OK;

int main()

{

}

2、 链式栈 #include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2 int n; SqQueue Q; InitQueue(Q); printf("*输入1为入队*\n"); printf("*输入2为出队*\n"); printf("*输入3为队列长度*\n"); printf("*输入4为遍历*\n"); printf("*输入0为退出*\n"); printf("*****************\n"); while(scanf("%d",&n),n) { } return 0; switch(n) { case 1:EnQueue(Q);break; case 2:DeQueue(Q);break; case 3:printf("队列长度为%d\n",QueueLength(Q));break; case 4:QueueTraverse(Q);break; }

typedef int Status;

typedef int SElemType;

typedef struct node

{

SElemType data;

struct node *next;}SLnode,*SLinkList;

typedef struct

{

SLinkList top,base;

int len;

}S_LinkList;

//栈的初始化

Status Creat_S(S_LinkList &S)

{ int n;

SLinkList p,q;

printf("栈的初始化,请输入数据,以-1结束:\n");

S.top=(SLinkList )malloc(sizeof(SLnode));

S.base=(SLinkList )malloc(sizeof(SLnode));

S.top->next=S.base;

q=S.base;

S.len=0;

while(scanf("%d",&n),n!=-1)

{

p=(SLinkList )malloc(sizeof(SLnode));

p->data=n;

S.top->next=p; p->next=q;

q=p;

S.len++;

}

q=S.top->next;

while(q!=S.base)

{

printf("%d\n",q->data);

q=q->next;

}

printf("*****\n");

return OK;

}

//进栈

Status Push_S(S_LinkList &S)

{

int e;

printf("请输入进栈元素:");

scanf("%d",&e);

SLinkList p,q;

q=S.top->next;

p=(SLinkList )malloc(sizeof(SLnode));

p->data=e;

S.top->next=p;

p->next=q;

q=p;

S.len++;

return OK;

}

//出栈

Status Pop_S(S_LinkList &S)

{

SLinkList p;

p=S.top->next;

if(p!=S.base)

printf("出栈元素为%d\n",p->data);

return OK;

}

int main()

{

S_LinkList s;

int a;

printf("*输入1为栈的初始化*\n");

printf("*输入2为入栈*\n");

printf("*输入3为出栈*\n");

printf("*输入0为退出*\n");

printf("************************\n");

while(scanf("%d",&a),a)

{

switch(a)

{

case 1:Creat_S(s);break;

case 2:Push_S(s);break;

case 3:Pop_S(s);break;

}

}

return 0;

}

四 调试情况、设计技巧及体会

为了避免顺序栈的存储结构所带来的在操作中需要移动大量数据的缺点,采用链栈,具有动态特性,不用设置头结点。队列是一种先进后出带的线性表,一个链队列由头指针和尾指针唯一确定,所以建立链表的时候,需要在对头加一个头结点,头指针指向头结点。

xxxx 大学实验报告

课程名称 数据结构 实验项目 实验一 线性结构(二) ——栈和队列的操作

院 系 信息学院计类系 专业班级 计类1501 姓 名 学 号

指导老师 日 期

批改日期 成 绩

一 实验目的 1. 熟练掌握栈的存储结构及相关典型操作。

2. 熟练掌握队列的存储结构及相关典型操作。

二 实验内容及要求

实验内容:

1. 建立链式栈,实现栈的初始化、进栈、出栈等典型操作。

2. 建立循环队列,实现队列的初始化、进队、出队等典型操作。

实验要求: 1. 键盘输入数据;

2. 屏幕输出运行结果。

3. 要求记录实验源代码及运行结果。

4. 运行环境:VC++6.0

三 实验过程及运行结果

1、 循环队列

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2

#define MAXQSIZE 100 //最大队列长度

typedef struct

{

int *base; //初始化的动态分配存储空间

int front;

int rear;

}SqQueue;

//初始化队列

int InitQueue(SqQueue Q)

{

}

//入队操作

int EnQueue(SqQueue Q)

{

}

//出队操作 int e; if ((Q.rear+1)%MAXQSIZE==Q.front) //判断队满 { } printf("请输入入队元素:"); scanf("%d",&e); Q.base[Q.rear]=e; //入队 Q.rear =(Q.rear+1)%MAXQSIZE; //队尾指针后移 return OK; printf("队列已满, 不能入队\n"); return ERROR; Q.base=(int*)malloc(MAXQSIZE*sizeof(int)); if (!Q.base)exit(OVERFLOW); //存储分配失败 Q.front=Q.rear=0; return OK;

int DeQueue(SqQueue Q)

{

}

//队列长度

int QueueLength(SqQueue Q)

{

}

//队列遍历

int QueueTraverse(SqQueue Q)

{

printf("遍历结果为:"); while (Q.front!=Q.rear) { } printf ("\n"); printf("%d ",Q.base[Q.front]); Q.front=(Q.front+1)%MAXQSIZE; return((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE); int e; if(Q.front==Q.rear) //判断队空 { } e=Q.base[Q.front]; //队头出队 printf("输出的出队元素为:"); printf("%d\n",e); Q.front=(Q.front+1)%MAXQSIZE; //队头下表后移 return OK; printf("队列已为空\n"); return ERROR;

} return OK;

int main()

{

}

2、 链式栈 #include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW -2 int n; SqQueue Q; InitQueue(Q); printf("*输入1为入队*\n"); printf("*输入2为出队*\n"); printf("*输入3为队列长度*\n"); printf("*输入4为遍历*\n"); printf("*输入0为退出*\n"); printf("*****************\n"); while(scanf("%d",&n),n) { } return 0; switch(n) { case 1:EnQueue(Q);break; case 2:DeQueue(Q);break; case 3:printf("队列长度为%d\n",QueueLength(Q));break; case 4:QueueTraverse(Q);break; }

typedef int Status;

typedef int SElemType;

typedef struct node

{

SElemType data;

struct node *next;}SLnode,*SLinkList;

typedef struct

{

SLinkList top,base;

int len;

}S_LinkList;

//栈的初始化

Status Creat_S(S_LinkList &S)

{ int n;

SLinkList p,q;

printf("栈的初始化,请输入数据,以-1结束:\n");

S.top=(SLinkList )malloc(sizeof(SLnode));

S.base=(SLinkList )malloc(sizeof(SLnode));

S.top->next=S.base;

q=S.base;

S.len=0;

while(scanf("%d",&n),n!=-1)

{

p=(SLinkList )malloc(sizeof(SLnode));

p->data=n;

S.top->next=p; p->next=q;

q=p;

S.len++;

}

q=S.top->next;

while(q!=S.base)

{

printf("%d\n",q->data);

q=q->next;

}

printf("*****\n");

return OK;

}

//进栈

Status Push_S(S_LinkList &S)

{

int e;

printf("请输入进栈元素:");

scanf("%d",&e);

SLinkList p,q;

q=S.top->next;

p=(SLinkList )malloc(sizeof(SLnode));

p->data=e;

S.top->next=p;

p->next=q;

q=p;

S.len++;

return OK;

}

//出栈

Status Pop_S(S_LinkList &S)

{

SLinkList p;

p=S.top->next;

if(p!=S.base)

printf("出栈元素为%d\n",p->data);

return OK;

}

int main()

{

S_LinkList s;

int a;

printf("*输入1为栈的初始化*\n");

printf("*输入2为入栈*\n");

printf("*输入3为出栈*\n");

printf("*输入0为退出*\n");

printf("************************\n");

while(scanf("%d",&a),a)

{

switch(a)

{

case 1:Creat_S(s);break;

case 2:Push_S(s);break;

case 3:Pop_S(s);break;

}

}

return 0;

}

四 调试情况、设计技巧及体会

为了避免顺序栈的存储结构所带来的在操作中需要移动大量数据的缺点,采用链栈,具有动态特性,不用设置头结点。队列是一种先进后出带的线性表,一个链队列由头指针和尾指针唯一确定,所以建立链表的时候,需要在对头加一个头结点,头指针指向头结点。


相关文章

  • 数据结构A教学大纲
  • 数据结构A 教学大纲 (Data Structures A) 课程编号: 06311360 学 分: 5.0 学 时: 75 (其中:讲课学时:60 实验学时:0 上机学时:15) 先修课程:离散数学.程序设计基础.面向对象程序设计 适用专 ...查看


  • 数据结构实验报告
  • 数据结构实验报告 实验一 1.编写算法实现线性顺序表的逆置. 2.用线性表的链式模式编写算法,实现两个表La=(1,5,4,8,6,11)和Lb=(9,7,4,2,1,5)的并集. 实验1-1 主要代码: bool GetElem(int ...查看


  • 数据结构上机实验
  • 数据结构上机实验 姓名: 学号: 院系: 指导教师: 1 数据结构上机实验报告 实验一 线性表 一. 实验目的 1. 熟悉线性表的顺序和链式存储结构 2. 掌握线性表的基本运算 3. 能够利用线性表的基本运算完成线性表应用的运算 二.实验内 ...查看


  • 数据结构栈和队列实验报告
  • 一.实验目的和要求 (1)理解栈和队列的特征以及它们之间的差异,知道在何时使用那种数据结构. (2)重点掌握在顺序栈上和链栈上实现栈的基本运算算法,注意栈满和栈空的条件. (3)重点掌握在顺序队上和链队上实现队列的基本运算算法,注意循环队队 ...查看


  • 航空客运订票系统(论文)
  • 信息科学与工程学部 数据结构课程设计 题 目 航空客运订票系统 姓 名 学 号 [1**********]894 学 院 信息科学与工程学院 专业.年级 软件工程1101班 指 导 教 师 2012 年 11月 27 日 摘 要 随着科技与 ...查看


  • 实验08 队列(循环队列)的表示和实现
  • 浙江大学城市学院实验报告 课程名称 数据结构基础 实验项目名称 实验八 队列(循环队列)的表示和实现 学生姓名 专业班级 学号 实验成绩 指导老师(签名 ) 日期 一. 实验目的和要求 1.掌握队列的存储结构及基本操作. 2.掌握循环队列的 ...查看


  • 二级access公共基础历年真题解析
  • 全国计算机等级考试二级公共基础历年真题解析  2010年9月 选择题:(1)下列叙述中正确的是( ) A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C)线性 ...查看


  • 2010~2011安徽大学数据结构期末试卷
  • 2010~2011安徽大学<数据结构>期末试卷 一.单选题 从供选择的答案中选出正确的答案,将其编号填入括号中. 1.在数据结构的讨论中把数据结构从逻辑上分为( ). A: 内部结构与外部结构 B: 静态结构与动态结构 C: 线 ...查看


  • 数据结构实验报告 1
  • 实 验 报 告 实验课程: 数据结构 实验项目: 实验 专 业: 计算机科学与技术 姓 名: 于凡 学 号: [1**********] 指导教师: 汪林林 实验时间: 2008-12-7 重庆工学院计算机学院 实验一 线性表 1. 实验要 ...查看


热门内容