首页 考试资料幻灯片工程技术公务员考试小学教学中学教学大学教学外语资料
84数据结构实验报告2


数据结构与数据库实验报告
作者:张一鸣 班级:通信二班 学号:201200121241 完成日期:2014 年 11 月 18 日 作业 1: 二叉树 编译环境:VS2013 程序语言:C 编译方式:debug 模式下动态编译;release 模式下静态编译。

思路:为了较为直观的表现该算法,因此设计一个简单的交互算法。图 1.1 为效果总览图。

图 1.1

源代码说明:
以下为二叉树节点的定义:

ypedef char datatype; typedef struct node{ datatype data; struct node *lchild, *rchild; }bitree; bitree *root; 整个程序有创建二叉树及二叉树遍历两个子函数,分别是 bitree *CreateTree()和 void Layer(bitree *p)。遍历 算法为作业要求的按层次遍历,也即广度遍历算法。 为了直观的显示用户的输入对二叉树的构造过程,创建二叉树时加入一个换行算法来实现自动换行,如下 if ((num = rear+1) % 2 == 0) { while ((num /= 2) % 2 == 0); if (num == 1) putchar('n'); }

源代码如下:
// 树.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "malloc.h" #include "conio.h" #define MAXSIZE 200

typedef char datatype; typedef struct node{ datatype data; struct node *lchild, *rchild; }bitree; bitree *root; bitree *CreateTree(){ char ch; bitree *Q[MAXSIZE]; int front, rear,num; bitree *root, *s; root = NULL; front = 1, rear = 0; while ((ch = _getche()) != 13)///////////////////////enter

{ printf(" "); s = NULL; if (ch != '*'){ s = (bitree*)malloc(sizeof(bitree)); s->data = ch; s->lchild = NULL; s->rchild = NULL; } rear++; Q[rear] = s; if (rear == 1) { root = s; putchar('n'); } else { if (s&&Q[front]) { if (rear % 2 == 0) Q[front]->lchild = s; else Q[front]->rchild = s; } if (rear % 2 == 1) front++; if ((num = rear+1) % 2 == 0) { while ((num /= 2) % 2 == 0); if (num == 1) putchar('n'); } } } return root; } void Layer(bitree *p){ bitree *Q[MAXSIZE]; bitree *s; int rear = 1, front = 0; Q[rear] = p;

printf("n 遍历结果如下:n"); while (front<rear) { front++; s = Q[front]; printf("%cn", s->data); if (s->lchild != NULL) { rear++; Q[rear] = s->lchild; } if (s->rchild != NULL) { rear++; Q[rear] = s->rchild; } } }

int _tmain(int argc, _TCHAR* argv[]) { bitree *t = NULL; printf("请构造二叉树,对于不存在的节点请输入“*”n 注意该树最多支持存在 200 个节点n"); t = CreateTree(); Layer(t); while (1) { printf("n 请按 ESC 键退出程序^_^"); if (_getch() == 27) return 0; printf("n 注意,是 ESC 键!=_=!"); } } //卖萌专用,请无视 //ASCII(ESC)==27 //程序退出

作业 2: 排序算法 编译环境:VS2013 程序语言:C 编译方式:debug 模式下动态编译;release 模式下静态编译。 思路:为了较为直观的表现该算法,因此设计一个简单的交互算法。图 2.11 为效果总览图。

图 2.11 源代码说明: 由作业要求, 不难发现采用顺序表的数据结构比较方便完成任务。 顺序表数据结构定义如下
typedef struct{ char name[20]; int grade; }node; typedef struct{ node *stu[1000]; int last; }linklist; 注:名字不小心打错了,打成 linklist 了。

本程序用 linklist *CreateList(void)函数来构造顺序表,用 void Requeue(linklist *L,int N)函数来对顺序表中
的结点按结点中分数高低来排序,排序算法借鉴最基本的插值算法。用 void print(linklist *L)函数来按顺序 打印当前顺序表的所有结点。

以下为源代码:
// 排序算法.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "malloc.h" #include "conio.h" /*************************************

顺序表数据类型定义 *************************************/

typedef struct{ char name[20]; int grade; }node; typedef struct{ node *stu[1000]; int last; }linklist;

linklist *CreateList(void){ int i = 0,j; char c; linklist *L; node *student[100]; L = (linklist*)malloc(sizeof(linklist)); L->last = -1; do { j = 0; student[j] = (node *)malloc(sizeof(node)); scanf_s("%s%d", student[j]->name,sizeof(student[j]->name), &student[j]->grade); while ((c = getchar()) != 'n' && c != EOF); // // // // // printf("%s,%d", student[j]->name, student[j]->grade); while (((L->stu[i]->name)[j] = (student->name)[j]) != 0)错误? j++; L->stu[i]->grade = student->grade;错误? L->stu[i++] = student[j]; i++; L->last++; printf("是否继续添加?“否”请按 n 键, “是”请按其他任意键"); if (_getch() == 'n')break; putchar('n'); j++; } while (1); return L; } void Requeue(linklist *L,int N){

int j, p; node *tmp; for (p = 1; p < N; p++) { tmp = L->stu[p]; for (j = p; j>0 && L->stu[j - 1]->grade > tmp->grade; j--) L->stu[j] = L->stu[j - 1]; L->stu[j] = tmp; } } void print(linklist *L){ int i; printf(""); for (i = 0; i <= L->last; i++){ printf("n%12s%6d", L->stu[i]->name, L->stu[i]->grade); } } int _tmain(int argc, _TCHAR* argv[]) { linklist *p = NULL; printf("n 请输入学生姓名及分数,姓名与分数之间以空格键隔开,输入完分数后按"ENTER"键确认 n"); p = CreateList(); printf("n 当前学生信息如下所示:n"); print(p); printf("n 利用插值排序法,得学生成绩排名如下:n"); Requeue(p, p->last + 1); print(p); while (1) { printf("n 请按 ESC 键退出程序^_^"); if (_getch() == 27) return 0; printf("n 注意,是 ESC 键!=_=!"); } } //卖萌专用,请无视 //ASCII(ESC)==27 //程序退出

12

 


 

  【Top

最新搜索

 

数据结构实验报告-二叉树的链式存储 - 《数据结构》实验报告 实验序号:8 学号 实验项目名称:二叉树的链式存储 姓名 专业班级 实验时间 实验地点 一、实验目的及...

北京理工大学《数据结构与算法设计》实验报告实验二 - 《数据结构与算法设计》 实验报告 ——实验二 学院: 班级: 学号: 姓名: 一、实验目的 1. 通过实验实践、...

数据结构(邹永林版)实验报告2-顺序表与链表 - 实验二 【实验目的】 顺序表与链表 1、掌握线性表中元素的前驱、后续的概念。 2、掌握顺序表与链表的建立、插入...

数据结构实 验报告 1. 实验目的和内容: 掌握二叉树基本操作的实现方法 2. 程序分析 2.1 存储结构 链式存储 2.程序流程 2.3 关键算法分析 算法一:Create(Bi...

2017-2018-1算法与数据结构实验报告二罗松 - 实验报告 姓名 完成时间 课程 罗松 班级 1434010105 学号 143401010510 王丹 2017.10.22 指...

数据结构二叉树遍历实验报告_电脑基础知识_IT/计算机_专业资料。二叉输遍历实验...(2)此外,二叉树的层次遍历即按照二叉树的层次结构进行遍历,按照从上 到下,同...

数据结构实验二 实验报告 - 《数据结构实验》实验报告 班级: 姓名: 学号: 实验二 线性表的基本操作 一、 实验目的 1.掌握栈的顺序表示和实现; 2.掌握队列的...

(2)实验任务 (3)需求分析 录 二、概要设计: (1)抽象数据类型定义 (2)主程序流程 (3) 模块关系 三、详细设计 (1)数据类型及存储结构 (2)模块设计 四、...

大二下学期数据结构课程设计实验报告 - 数据结构课程设计实验报告,18选4编程运行,一元多项式,二叉树,拓扑排序,航空客运订票系统。

数据结构实验2 四则运算 - 南华大学 实验报告( 201 6 ~201 7 学年度 第一 学期 ) 数据结构 课程名称 表达式求值 实验名称 姓名 XX 专业 计算机类 地点 南...