数据结构实验报告
题目:栈和队列的基本操作(猴子选大王)
班级:计算机 07.5
姓名:董朝
学号:200707149
指导教师: 张艳
完成日期: 2009 年 4 月 21 日
青 岛 理 工 大 学
课程实验报告
数据结构实
验
班级
计算 07.5
董朝
学号
200707149
2009-4-21
实验日
期
实验成
绩
栈和队列的基本操作(猴子选大王)
目的:1.熟练掌握栈的基本操作如初始化栈、判栈为空、出栈、入栈等运算。
2.熟练掌握队列的基本操作如初始化队列、入队、出对、判断队列是否为空等。(根
据不同的题目而定)
要求:独立完成实验任务,程序要求正确并具有一定的健壮性,必须提交电子版和打
印版的实验报告,实验报告要求文字工整通顺、思路清楚、算法描述清楚,内容正确。
WindousXP 系统
Vc 软件
有一群猴子。猴子从头开始循环计数,假若数到某一个特定的数
则这只猴子出队。最后剩下的猴子就是大王(假设猴子已经排好
队)。
课
程
名
称
姓
名
实
验
名
称
实
验
目
的
及
要
求
实
验
环
境
实
验
内
容
1.本程序中数据结构的定义:
typedef struct DuLNode
{
ElemType
data;
struct
DuLNode *next;
算
法
描
述
及
实
验
步
骤
}DuLNode , *Linklist;//定义了一个结构体,其元素为一个元素
和指向自身的指针
其基本操作的定义;
Linklist Create( int count)
//创建一个无头结点的循
环单链表,并对其数据域的元素按自然数顺序赋值
void Prt()
//打印程序菜单
2. 画出函数之间的调用关系图;
Main
Prn
Create
调
试
过
程
及
实
验
结
果
总
结
附
录
输入后字数:8
循环数:3
最后输出:这群猴子的大王就是第 7 只猴子。
程序执行图示如下:
能够很简单的转化进制,使进制转换更加方便,基本.熟练掌握栈的基本操
作如初始化栈、判栈为空、出栈、入栈等运算。熟练掌握队列的基本操作如初
始化队列、入队、出对、判断队列是否为空等
Main.c
/*
*
Created
on
2009��3��27��,
* File: monkey.c
����5:49
* Author: Administrator
*/
*
#include "mylist.h"
#define EQ ==
int
count;
for(i = count;i >= 2;i--)
{
p
=
//count 是 在 队 列 中 的 猴 子
(Linklist)malloc(sizeof(DuL
的个数
int
n;
Node));
if(!p)
exit(ERROR);
Linklist Create( int count)
{
p->data = i;
p->next = L->next;
//创建一个无头结点的
L->next = p;
循环单链表,并对其数据域
}
的元素按自然数顺序赋值
Linklist p,L;
i;
int
L
}
=
return L;
(Linklist)malloc(sizeof(DuL
void Prt()
Node));
{
if(!L) exit(ERROR);
printf(" 这 是 一 个 猴 子
p
= L;
L->data = 1;
L->next = p;
选大王的游戏。你是动物园
的管理员。你想从这群猴子
中选出一个头头,\n\
让猴子自己管理自己。
head;
猴子从头开始循环计数,假
//定义一个计数指针 point
若数到某一个特定的数则这
Prt();
只猴子出队。最后\n\
printf("%d。", n);
剩下的猴子就是大王到
point = Create(count);
现在猴子已经排好队。请先
//point 指向第一个元素(第
数数总共有多少猴子。\n");
一只猴子)
scanf("%d",&count);
for(j = 1;count != 1;j++)
getchar();
//吞掉回车
//j 为循环计数,每执行一步
加一。当队列中还剩一只猴
printf(" 请 指 定 这 个 特
子时退出循环
定的数\n");
{
scanf("%d",&n);
getchar();
}
int main()
{
if((j+1)%n EQ 0)
// 程序关键算法
{
q
=
point->next;
printf(" 第 %d
猴 子 出 局 了 , 哈 哈 \n",
q->data);// 通 过 取 模 运 算 将
int
j;
不幸的猴子删除循环列表
Linklist
point, q,
point->next =
point->next->next;
free(q);
count--;
}
else
point
=
point->next;
}
printf(" 这 群 猴 子 的 大
王 就 是 第 %d 只 猴 子 。 ",
1;
on
point->data);
return
// 1 表示程序执行成功
}
Mylist.h
/*
* File: mylist.h
* Author: Administrator
*
*
2009��3��27��,
����5:31
*/
Created
#ifndef _MYLIST_H
#define _MYLIST_H
__cplusplus
#ifdef
extern "C" {
#endif
#include
#include
#include
#define
100
#define
10
#define
-2
#define OK
#define
0
#define
-1
#define
-2
LIST_INIT_SIZE
LISTINCREMENT
OVERFLOW
1
ERROR
INFEASIBLE
OVERFLOW
status;
typedef int
typedef int ElemType;
typedef struct DuLNode
{
ElemType
struct
DuLNode
data;
*next;
}DuLNode , *Linklist;
__cplusplus
/* _MYLIST_H */
cout<<x;
//输出
#ifdef
}
#endif
#endif
}
}
}