文档库 最新最全的文档下载
当前位置:文档库 › 数据结构实验报告—排序

数据结构实验报告—排序

数据结构实验报告—排序
数据结构实验报告—排序

《算法与数据结构》课程实验报告

一、实验目的

1.实现多种类型的排序算法(插入排序、交换排序、选择排序、归并排序等)

2.理解排序过程

3.计算比较次数和移动次数,对比分析算法性能的优劣与适用场景

二、实验内容及要求

1、随机产生100个整数

2、使用不同的内排序方法对其排序,不得使用STL(标准模板库)现成代码

3、领会排序的过程

4、编程语言:C++

三、系统分析

(1)数据方面:通过随机数产生随机整形数据,在此基础上实现相关排序功能的调试。

(2)功能方面:

1.产生随机数

2.冒泡排序

3.直接插入排序

4.折半插入排序

5.希尔排序

6.快速排序

7.直接选择排序

8.归并排序

四、系统设计

(1)设计的主要思路

利用产生随机数的方法得到待排序数据元素的有限集合。在根据不同的排序算法使得这个集合变为递增序列。其中排序算法包括冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、直接选择排序、归并排序七中排序方式。(2)基本操作的设计

冒泡排序的基本方法:设待排序元素序列中元素个数为n,首先比较第n-2个元素和第n-1个元素,如果发生逆序(即前一个大于后一个),则将这两个元素交换;然后对第n-3个和第n-2个元素做同样处理,重复此过程直到处理完第0个和第1个元素。

直接插入排序的基本方法:当插入第i个元素时,前面的元素已经排好序,这时用V[i]的数据元素与前面的值进行比较,找到插入的位置,原来位置上的元

素向后顺移。

折半插入排序的基本方法:设在数据表中的元素序列个数为n。基本方法与直接插入排序一致,但在找寻插入位置的算法采用折半查询。

希尔排序的基本方法:设待排序序列有n个元素,首先取一个整数gap

快速排序的基本方法:任取待排序元素序列中某个元素作为基准,按照该元素的值大小,将整个元素序列划分为左右两个子序列:左侧子序列所有元素的值都小于基准元素的值,右侧子序列中所有元素的值都大于或等于基准元素的值,基准元素则排在这两个子序列中间。然后分别对这两个子序列重复施行上述方法,直到所有的元素都排在相应的位置上即可。

归并排序的基本方法:归并排序是一种基于分治法的排序方法,归并排序将待排序的元素序列列分为两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。

五、编程环境与实验步骤

(1)编程环境

操作系统:Windows操作系统;编程工具软件:Visual Studio 2017

(2)实验步骤

程序相关文件有:dataList.h一个头文件以及主函数调试文件main.cpp

(3)编译参数

无编译参数,在Vs2017或其他版本中新建项目然后将程序相关文件添加到解决方案中对应位置中调试即可。

六、实现代码

main.cpp:

#include

using namespace std;

#include

#include

#include"dataList.h"

int* Rand(int *A, int num, int rands); //A为储存随机数数组,num为随机数个数,rands为随机数范围

int main() {

int n;

cout << "输入产生随机数个数:"; cin >> n;

int *A;

A= new int[n]; //产生随机数数组

dataList L2(100, n);

dataList L(100, n);

int fini = 0; int choose;

while (!fini) {

cout << "************************************************************" << endl;

cout << "-----------------------------排序操作-----------------------" << endl;

cout << "-----------------------------1:产生随机数--------------------" << endl;

cout << "-----------------------------2:冒泡排序---------------------" << endl;

cout << "-----------------------------3:直接插入排序-----------------" << endl;

cout << "-----------------------------4:折半插入排序-----------------" << endl;

cout << "-----------------------------5:希尔排序---------------------" << endl;

cout << "-----------------------------6:快速排序---------------------" << endl;

cout << "-----------------------------7:直接选择排序-----------------" << endl;

cout << "-----------------------------8:归并排序---------------------" << endl;

cout << "-----------------------------9:退出-------------------------" << endl;

cout << "************************************************************" << endl;

cout << "请输入你的选择[1-9]:" << endl;

cin >> choose;

switch (choose) {

case 1:

A = new int[n]; A = Rand(A, n, 100);

L.SetVector(A, n);

cout << "产生的随机数为:" << endl;

for (int i = 0; i < n; i++){

cout << A[i] << " ";

}

cout << endl;

break;

case 2:

L.BubbleSort(L,n);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 3:

L.InsertSort(L, 0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 4:

L.BinaryInsertSort(L, 0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 5:

L.ShellSort(L, 0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 6:

L.QuickSort(L, 0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 7:

L.SelectSort(L, 0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 8:

L.mergeSort(L, L2,0, n - 1);

for (int i = 0; i < n; i++)

cout << L.Vector[i] << " ";

cout << endl;

break;

case 9:

fini = 1;

break;

default:

cout << "输入选择错误,请重新输入!" << endl;

}

}

system("pause");

return 0;

}

int* Rand(int *A, int num, int rands) {

A = new int[num];

int i; //整型数组和变量声明

srand((int)time(NULL)); //设置系统时间为随机种子

for (i = 0; i < num; i++) //产生num个随机数

{

A[i] = 1 + rand() % rands; //得到随机数(范围在1-rands之间)

for (int j = 0; j < i; j++) //判断和前面的数是否重复if (A[i] == A[j]) { i--; break; } //如果重复,重新产生随机数}

return A;

}

dataList.h:

const int DefaultSize = 100;

template

class dataList {

public:

T *Vector;

int maxSize;

int currentSize;

public:

dataList(int n,int maxSz = DefaultSize) :maxSize(maxSz), currentSize(n) { Vector = new T[maxSize];

}

void Swap(T x, T y) {

T temp = x; x = y; y = temp;

}

int Length() {

return currentSize;

}

T& operator[](int i) {

return Vector[i];

}

void SetVector(int *a,int n);//为Vector赋值

int Partition(dataList& L, int low,int high);

void QuickSort(dataList& L, int left, int right);//快速排序

void InsertSort(dataList& L, int left, int right);//直接插入排序算法

void BinaryInsertSort(dataList& L, int left, int right);//折半插入排序

void SelectSort(dataList& L, int left, int right);//直接选择排序

void merge(dataList& L1, dataList&L2, int left, int mid, int right);

void mergeSort(dataList& L, dataList&L2, int left, int right);//归并排序void BubbleSort(dataList& L, int n);//冒泡排序

void ShellSort(dataList& L, int left, int right);//希尔排序

};

template

int dataList::Partition(dataList&L, int low, int high)//交换排序{

int i, j, k;

k = L.Vector[high];//将中轴元素设为最后一个元素

i = low - 1;

for (j = low; j < high; ++j)

{

if (L.Vector[j] <= k)

{

i++;

Swap(L.Vector[i], L.Vector[j]);

}

}

Swap(L.Vector[i + 1], L.Vector[high]);

return i + 1;

};

template

void dataList::QuickSort(dataList&L, int low, int high)//递归实现{

if (low < high)

{

int k = Partition(L, low, high);

QuickSort(L, low, k - 1);

QuickSort(L, k + 1, high);

}

};

template

void dataList::ShellSort(dataList& L, int left, int right) { int i, j; int gap = right - left + 1;

int temp;

do {

gap = gap / 3 + 1;

for(i=left+gap;i<=right;i++)

if (L.Vector[i] < L.Vector[i - gap]) {

temp = L.Vector[i]; j = i - gap;

do {

L.Vector[j + gap] = L.Vector[j];

j = j - gap;

} while (j >= left && temp < L.Vector[j]);

L[j + gap] = temp;

}

}while (gap > 1);

}

template

void dataList::BubbleSort(dataList& L, int n) {

int t;

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - 1 - i; j++) {

if (L.Vector[j] > L.Vector[j + 1]) {

t = L.Vector[j];

L.Vector[j] = L.Vector[j + 1];

L.Vector[j + 1] = t;

}

}

}

}

template

void dataList::SetVector(int *a, int n){

for (int i = 0; i < n; i++)

Vector[i] = a[i];

}

template

void dataList::InsertSort(dataList& L, int left, int right) { T temp; int i, j;

for (int i = left + 1; i <= right; i++) {

if (L.Vector[i] < L.Vector[i - 1]) {

temp = L.Vector[i]; j = i - 1;

do {

L.Vector[j + 1] = L.Vector[j]; j--;

} while (j >= left&&temp < L.Vector[j]);

L.Vector[j + 1] = temp;

}

}

}

template

void dataList::BinaryInsertSort(dataList& L, int left, int right) { T temp; int i, low, high, middle, k;

for (i = left + 1; i <= right; i++) {

temp = L.Vector[i]; low = left; high = i - 1;

while (low <= high) {

middle = (low + high) / 2;

if (temp < L.Vector[middle])

high = middle - 1;

else

low = middle + 1;

}

for (k = i - 1; k >= low; k--)

L.Vector[k + 1] = L.Vector[k];

L.Vector[low] = temp;

}

}

template

void dataList::SelectSort(dataList& L, int left, int right) {

for (int i = left; i < right; i++) {

int k = i;

for (int j = i + 1; j <= right; j++) {

if (L.Vector[j] < L.Vector[k])

k = j;

}

if (k != i)

Swap(L.Vector[i], L.Vector[k]);

}

}

template

void dataList::merge(dataList& L1, dataList&L2, int left, int mid, int right) { for (int k = left; k <= right; k++)

L2.Vector[k] = L1.Vector[k];

int s1 = left, s2 = mid + 1, t = left;

while (s1 <= mid && s2 <= right)

if (L2.Vector[s1] <= L2.Vector[s2])

L1.Vector[t++] = L2.Vector[s1++];

else

L1.Vector[t++] = L2.Vector[s2++];

while (s1 <= mid)L1.Vector[t++] = L2.Vector[s1++];

while (s2 <= right)L1.Vector[t++] = L2.Vector[s2++];

}

template

void dataList::mergeSort(dataList& L, dataList&L2, int left, int right) { if (left >= right)

return;

int mid = (left + right) / 2;

mergeSort(L, L2, left, mid);

mergeSort(L, L2, mid + 1, right);

merge(L, L2, left, mid, right);

}

七、测试结果与说明

产生随机数:

冒泡排序:

直接插入排序:

折半插入排序:

希尔排序:

快速排序:

直接选择排序:

归并排序:

八、实验分析

(1)算法的性能分析

以一组实例对各种排序的性能进行分析:冒泡排序O(n2):

插入排序O(n2):

希尔排序O(n^1.3):

快速排序O(nlog2^n):

选择排序O(n2):

归并排序O(nlog2^n):

(2)数据结构的分析

综合对排序的理解与分析,查阅相关资料对各个排序之间进行比较分析,得到如下图结果:

九、实验总结

经过一个多星期的努力,完成了数据结构中排序的内容。通过这次实验,对于不同方式的排序有了了解。由于采用了顺序表存储待排序数据元素,对于前段时间的顺序表结构也进行一定程度的复习。同时对递归相关操作复习了一遍,对递归结束条件以及相关代码分析更加透彻。并且,在整个实验程序编写的各个阶段也都有所收获。

首先,在理论课上学习了各种不同排序方式的算法,对各个排序有了基本

的了解,这对研读书中代码以及程序编写都有一些帮助。这次实验由于不需要设

计数据结构故较为轻松。在代码的分析阶段只需将之前所涉及的代码进行分析了解,由于实验要求产生不同整形随机数,这在之前的搜索结构实验有所涉及。所以这个过程并没有遇到太大的麻烦。

其次,在程序的设计阶段也让我有很大收获,由于此次实验重点是对于几种不同的排序算法进行掌握,在此之前对于各种排序已经有所了解,所以只需对不够熟练的排序方法进行分析即可。通过对于书上代码仔细理解之后发现一些排序方法的实现都需要利用递归,于是再程序设计之前将递归重新复习了一次,对于如何编写递归结束条件,以及何时进行递归有了更深的理解。这个过程让我收获最大的就是对于递归的理解更加深入,同时也对于一些排序方法的理解更为透

彻。

最后,通过这次实验,让我对多种排序的性能有所了解,同时对于它们的实现方法也能掌握。相信在日后需要用到排序时能够更加的熟练。

数据结构实验8实验报告

暨南大学本科实验报告专用纸 课程名称数据结构实验成绩评定 实验项目名称习题6.37 6.38 6.39 指导教师孙世良 实验项目编号实验8 实验项目类型实验地点实验楼三楼机房学生姓名林炜哲学号2013053005 学院电气信息学院系专业软件工程 实验时间年月日午~月日午温度℃湿度(一)实验目的 熟悉和理解二叉树的结构特性; 熟悉二叉树的各种存储结构的特点及适用范围; 掌握遍历二叉树的各种操作及其实现方式。 理解二叉树线索化的实质是建立结点与其在相应序列中的前去或后继之间的直接联系,熟练掌握二叉树的线索化的过程以及在中序线索化树上找给定结点的前驱和后继的方法。 (二)实验内容和要求 6.37试利用栈的基本操作写出先序遍历的非递归形式的算法。 6.38同题6.37条件,写出后序遍历的非递归算法(提示:为分辨后序遍 历时两次进栈的不同返回点需在指针进栈时同时将一个标志进栈)。 6.39假设在二叉链表的结点中增设两个域:双亲域以指示其双亲结点; 标志域以区分在遍历过程中到达该结点时应继续向左或向右或访问该节点。试以此存储结构编写不用栈进行后序遍历的递推形式的算法。(三)主要仪器设备 实验环境:Microsoft Visual Studio 2012 (四)源程序

6.37: #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define TRUE 1 #define FALSE 0 typedef struct bitnode{ char data; struct bitnode *lchild,*rchild; }bitnode,*bitree; void create(bitree &T){ char t; t=getchar(); if(t==' ') T=NULL; else{ if( !( T=(bitnode*)malloc(sizeof(bitnode)) ) ) exit(0); T->data=t; create(T->lchild); create(T->rchild); } } typedef struct{ bitree *base; bitree *top; int stacksize; }sqstack; void initstack(sqstack &S){ S.base=(bitree*)malloc(STACK_INIT_SIZE *sizeof(bitree)); if(!S.base) exit(0); S.top=S.base; S.stacksize=STACK_INIT_SIZE; } void Push(sqstack &s,bitree e){ if(s.top - s.base >= s.stacksize){ s.base =

数据结构实验报告格式

《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时)

《数据结构与算法设计》实验大纲及实验内容详细要求

《数据结构与算法设计》实验大纲及实验内 容详细要求 一、课程编号: 二、课程类型:必修 适用专业:通信工程 实验学时:32学时 三、本课程的地位、作用与任务 数据结构课程的目标是使学生掌握数据的基本的逻辑结构和存储结构、一些典型的数据结构算法及程序设计方法,要求学会分析数据对象特征,掌握数据组织方法和计算机的表示方法,为数据选择适当的逻辑结构、存储结构以及相应的处理算法,要求具备算法分析的基本技术和能力,并培养良好的程序设计风格,掌握开发复杂、高效程序的技能。 在实验前要预习或者自行补充部分学时,同时进行部分代码准备,实验后要认真完成实验报告。 四、课程基本要求 1.学生应根据每个实验的任务和教师所提的要求,带C语言教材和课程教材。 2.完成指定的实验任务,保存源代码并输出、记录实验结果。 3.实验结束后按时提交实验报告,对于未完成部分,应该利用课余时间补充完成。 五、实验安排 本实验课程共32学时,五个实验(单元),分16次实验,每次2学时。 实验一:C程序编程、调试实验 1、实验学时:4学时(学生堂下自行加4学时) 2、实验目的: 1)巩固复习前期所学C语言的基本数据类型和自定义数据类型等知识点,强化 学习数据结构语言和编程基础。 2)巩固复习前期所学C语言的函数参数传递、指针和结构体等知识点,加强学

习数据结构语言基础。 3)能够较熟练调试程序 3、实验内容: 1)学生信息的显示。具体要求如下: ●定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址); ●设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构 体类型; ●设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数 进行显示(学生人数不少于5人)。 2)输入若干个整数存储到数组元素值,然后按输入顺序进行逆置存储,最后打 印出逆置后的元素值。要求用指针和动态内存分配方法实现。例如输入:1023045,逆置后显示为:5430210。 3)编写扑克牌发牌程序。在VC++的调试环境下观察数据存储位置、存储数据的 变化、数据之间的逻辑次序、物理存储位置次序。 4)对上述C程序进行调试,运行,从中理解数据和算法的概念,总结调试方法。 实验二:线性表的存储及基本操作、综合应用 1、实验学时:6学时 2、实验目的: 1)掌握线性表的逻辑特征 2)熟练掌握线性表的链式存储结构定义及基本操作 3)理解循环链表和双链表的特点和基本运算 4)加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实 际问题的编程能力。 5)掌握顺序表和链表的概念,学会对问题进行分析,选择恰当的逻辑结构和物理 结构 6)和实验一一起撰写一份实验报告,总结学习效果 3、实验内容: 使用顺序表和链表两种存储结构(linked list),存储输入的一组数据整数,能够进

数据结构实验五-查找与排序的实现

实验报告 课程名称数据结构实验名称查找与排序的实现 系别专业班级指导教师11 学号实验日期实验成绩 一、实验目的 (1)掌握交换排序算法(冒泡排序)的基本思想; (2)掌握交换排序算法(冒泡排序)的实现方法; (3)掌握折半查找算法的基本思想; (4)掌握折半查找算法的实现方法; 二、实验内容 1.对同一组数据分别进行冒泡排序,输出排序结果。要求: 1)设计三种输入数据序列:正序、反序、无序 2)修改程序: a)将序列采用手工输入的方式输入 b)增加记录比较次数、移动次数的变量并输出其值,分析三种序列状态的算法时间复杂 性 2.对给定的有序查找集合,通过折半查找与给定值k相等的元素。 3.在冒泡算法中若设置一个变量lastExchangeIndex来标记每趟排序时经过交换的最后位置, 算法如何改进? 三、设计与编码 1.本实验用到的理论知识 2.算法设计

3.编码 package sort_search; import java.util.Scanner; public class Sort_Search { //冒泡排序算法 public void BubbleSort(int r[]){ int temp; int count=0,move=0; boolean flag=true; for(int i=1;ir[j+1]){ temp=r[j]; r[j]=r[j+1]; r[j+1]=temp; move++; flag=true; } } } System.out.println("排序后的数组为:"); for(int i=0;i

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

《数据结构设计》内容要求要点

禁止抄袭,否则一律不及格。机会仅有一次!!!!! 《数据结构课程设计》 一、基本要求 (1)选择一个与线性表、堆栈和队列、数组、树、图、排序、查找等相关的专题,利用C语言或java来实现,解决具有一定规模的、具有实际意义的应用题目。 (2)论文内容主要包括封面、正文、参考文献等,其中正文内容主要引言、系统分析设计、系统实现和小结几部分组成。 (3)论文格式参考下面文档《模板》撰写课程报告。 (4)特别要求自己独立完成。 (5)第15周周一提交课程设计论文、电子版、源代码。 二、创新要求 在基本要求达到后,可进行创新设计,如改善算法性能、友好的人机界面。 可选题目列表: 1.运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分, 3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 5)数据存入文件并能随时查询 6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有合理的提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

数据结构课程设计题目及要求

实验一~实验四任选一题;实验五~实验九任选一题。 实验一运动会分数统计 一、实验目的: (1)熟练掌握线性表的两种存储方式 (2)掌握链表的操作和应用。 (3)掌握指针、结构体的应用 (4)按照不同的学校,不同项目和不同的名次要求,产生各学校的成绩单、团体总分报表。 二、实验内容: 【问题描述】 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 【基本要求】 产生各学校的成绩单,内容包括各校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 【测试数据】 对于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为偶数的项目取前三名,设计一组实例数据。 【实现提示】 可以假设m≤20,m≤30,w≤20,姓名长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按名次顺序输入运动员姓名、校名(和成绩)。 【选作内容】 允许用户指定某些项目可采取其他名次取法。

实验二停车场管理 一、实验目的: (1)熟练掌握栈顺存和链存两种存储方式。 (2)掌握栈的基本操作及应用。 (3)以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。 二、实验内容: 【问题描述】 设停车场是一个可停放n辆汽车的长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车信放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场院,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。 【基本要求】 以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表结构实现。 【测试数据】 设n=2,输入数据为:(A,1,5),(A,1,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到达(Arrival);D表示离去(Departure);E表示输入结束(End)。 【实现提示】 需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。 【选作内容】 (1)两个栈共享空间,思考应开辟数组的空间是多少? (2)汽车可有不同种类,则他们的占地面积不同收费标准也不同,如1辆客车和1.5辆小汽车的占地面积相同,1辆十轮卡车占地面积相当于3辆小汽车的占地面积。(3)汽车可以直接从便道开走,此时排在它前面的汽车要先开走让路,然后再依次排到队尾。 (4)停放在便道上的汽车也收费,收费标准比停放在停车场的车低,请思考如何修改结构以满足这种要求。

数据结构实验五

1. 实验步骤: 先定义顺序表的结点: typedef struct { KeyType key; InfoType otherinfo; }ElemType; typedef struct { ElemType *R; int length; }SqList; 然后定义一个随机取数的函数,存到顺序表中: void CreateList(SqList &L,int n) 然后定义一个显示顺序表的函数,将顺序表中的数据显示出来: void ListTraverse(SqList L) 然后通过排序函数,将所有的数据按照从大到小的顺序排列: void BubbleSort(SqList &L) 实验结果: 测试数据: 38 86 9 88 29 18 58 27 排序后: 9 18 27 29 38 58 86 88 BubbleSort排序方法中数据的比较次数为:27 疑难小结: 这个程序的难点在于排序函数,总是把从第几个数开始排序以及怎样循环弄错。 源代码: #include using namespace std; #include typedef int KeyType; typedef char * InfoType; typedef struct { KeyType key; InfoType otherinfo; }ElemType; typedef struct { ElemType *R; int length; }SqList; int CmpNum; void CreateList(SqList &L,int n) { int i;

数据结构实验报告模板

2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList&List) //单链表排序 ListClear(&L); //将单链表L中的所有元素删除,使单链表变为空表 ListDestroy(&L);//将单链表销毁 }ADT List 其他函数: 主函数; 结点类; 约瑟夫函数 2.1 存储结构

[内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template class CirList;//声明单链表类 template class ListNode{//结点类定义; friend class CirList;//声明链表类LinkList为友元类; Type data;//结点的数据域; ListNode*next;//结点的指针域; public: ListNode():next(NULL){}//默认构造函数; ListNode(const Type &e):data(e),next(NULL){}//构造函数 Type & GetNodeData(){return data;}//返回结点的数据值; ListNode*GetNodePtr(){return next;}//返回结点的指针域的值; void SetNodeData(Type&e){data=e;}//设置结点的数据值; void SetNodePtr(ListNode*ptr){next=ptr;} //设置结点的指针值; }; 单循环链表类: templateclass CirList { ListNode*head;//循环链表头指针 public: CirList(){head=new ListNode();head->next=head;}//构造函数,建立带头节点的空循环链表 ~CirList(){CirListClear();delete head;}//析构函数,删除循环链表 void Clear();//将线性链表置为空表 void AddElem(Type &e);//添加元素 ListNode *GetElem(int i)const;//返回单链表第i个结点的地址 void CirListClear();//将循环链表置为空表 int Length()const;//求线性链表的长度 ListNode*ListNextElem(ListNode*p=NULL);//返回循环链表p指针指向节点的直接后继,若不输入参数,则返回头指针 ListNode*CirListRemove(ListNode*p);//在循环链表中删除p指针指向节点的直接后继,且将其地址通过函数值返回 CirList&operator=(CirList&List);//重载赋

数据结构实验五A

《数据结构与算法分析》 实验报告书 学期:2014 - 2015 学年第 2 学期 班级:信息管理与信息系统2班 学号: 1310030217 姓名:田洪斌 实验类别:(★)基础型()设计型 实验时间: 成绩: 信息管理系

一、实验内容 实现程序,按满二叉树给元素编号并输入的方式构造二叉树。 二、实验目的 1、掌握二叉树的静态及操作特点; 2、掌握二叉树的各种遍历方法; 3、掌握二叉树的存储、线索化等在C语言环境中的实现方法; 4、掌握哈夫曼树的构造方法及编码方法。 三、需求分析 用二叉树结构表示来完成输入、编辑、调试、运行的全过程。并规定: a.手动输入数字建立二叉树 b.程序可以输入、调试、运行、显示、遍历 c.测试数据:用户手动输入的数据 四、系统设计 1.数据结构设计 在本程序中对二叉树的存储主要用的是顺序存储结构,将二叉树存储在一个一维数组中。数据的输入输出都是采用整型数据进行。在主函数中只是定义数据类型,程序的实现功能化主要是在主函数中通过给要调用的函数参数来实现程序要求的功能。 2.程序结构设计 (1)程序中主要函数功能: main()/////////////////////////////////////////////主函数 menu()/////////////////////////////////////////////菜单 BiTree CreateBiTree()///////////////////////先序建立二叉树 (2)函数调用关系 见图4-1。

图4-1 函数关系图 五、 调试分析 1.算法和函数中出现了一些系统无法识别的变量,照成程序出现了错 误。原因是没有注意算法与源程序的区别。算法是简单的对源程序进行描述 的,是给人阅读的,所以有些变量没有定义我们就能看懂。而程序中的变量一定要先定义才能够被引用,才能被计算机识别。 2.在调试过程中遇到问题是利用C++程序进行调试的,找出错误并改正。 3.数据输出函数运行不正常,经检查程序,发现是定义错误,更改后错误排除; 六、 测试结果 1.运行时输入正确密码进入主界面,系统根据输入的数字选项来调用相应的函数。主要实现“功能选择”的界面,在这个界面里有显示系统的五大功能,根据每个功能前面的序号进行选择。以下为该界面: main BiTree CreateB iTree() meun()

数据结构-实验五-图

数据结构与算法课程实验报告实验五:图的相关算法应用 姓名:cll 班级: 学号:

【程序运行效果】 一、实验内容: 求有向网络中任意两点之间的最短路 实验目的: 掌握图和网络的定义,掌握图的邻接矩阵、邻接表和十字链表等存储表示。掌握图的深度和广度遍历算法,掌握求网络的最短路的标号法和floyd算法。 二、问题描述: 对于下面一张若干个城市以及城市间距离的地图,从地图中所有可能的路径中求出任意两个城市间的最短距离及路径,给出任意两个城市间的最短距离值及途径的各个城市。 三、问题的实现: 3.1数据类型的定义 #define MAXVEX 50 //最大的顶点个数 #define MAX 100000 typedef struct{ char name[5]; //城市的名称

}DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //邻接矩阵表示图 3.2主要的实现思路: 用邻接矩阵的方法表示各城市直接路线的图,之后用Floyd算法求解两点直接的最短距离,并用递归的方法求出途经的城市。 主要源程序代码: #include #include #define MAXVEX 50 #define MAX 100000 typedef struct{ char name[5]; //城市的名称 }DataType; //数据结构类型 typedef struct{ int arcs[MAXVEX][MAXVEX]; //临接矩阵 DataType data[MAXVEX]; //顶点信息 int vexs; //顶点数 }MGraph,*AdjMetrix; //创建临接矩阵 void CreatGraph(AdjMetrix g,int m[][MAXVEX],DataType d[],int n){ /*g表示邻接矩阵,m[][MAXVEX]表示输入的邻接矩阵,d[]表示各城市的名称,n表示城市数目*/ int i,j; g->vexs = n; for(i=0;i < g->vexs;i++){ g->data[i] = d[i]; for(j=0;jvexs;j++){ g->arcs[i][j] = m[i][j]; } } } //求最短路径 void Floyd(AdjMetrix g,int F[][10],int path[][10]){ int i,j,k; for(i=0;ivexs;i++){ for(j=0;jvexs;j++){

《数据结构》实验指导书

数据结构实验课程大纲 本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。 一、目的与任务 数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。同时,在程序设计方法、程序设计风格及上机操作等基本技能和科学作风方面受到比较系统的、严格的训练。提高分析问题和用计算机解决实际问题的能力。为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。 二、课程内容 1.顺序表的表示和运算(0-2学时) 2.链表的表示和运算(2学时) 3.栈的应用(2-3学时) 4.队列的应用(2-3学时) 5.二叉树的基本操作和应用(2-6学时) 6.图及其应用(2-6学时) 7.排序(4-6学时) 8.查找(2-4学时) 三、基本要求 1.逐步理解和掌握程序设计和上机操作的基本方法和技能。 2.理解并实现各种基本数据结构的存贮表示、运算方法及其典型应用;学会根据实际问题的要求设计算法的 数据结构,并具有一定的比较和选用数据结构及算法的能力。 3.理解并实现常用的查找和排序的基本方法。 四、学时分配

五、实验内容 注:带*的内容以及练习与思考题,可根据实际学时、专业方向特点等具体要求,做相应调整或从略。 实验一、顺序表 实验目的: 熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。 实验要求: 了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。 实验内容: 编写程序实现下列的要求: (1) 设数据元素为整数,实现这样的线性表的顺序存储表示。 (2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。 (3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。 (4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。要求尽可能少地修改前面的程序来得到新程序。(这里用于比较的字段为分数) 练习及思考题: (1)不同类型的数据元素所对应的顺序表在类型定义和操作实现上有什么异同? (2)顺序表的操作上有什么特点? (3)不固定数据元素的个数,而通过特殊数据来标记输入数据的结束,实现这样的输入操作。 实验二、链表 实验目的: 熟悉链式表的逻辑特性、存储表示方法的特点和链式表的基本操作。 实验要求: 了解并熟悉链式表的逻辑特性、存储表示方法和链式表的基本操作的实现和应用。 实验内容: 编写程序实现下列的要求: (1) 设学生成绩表中的数据元素为学生成绩(含姓名、成绩字段),实现这样的线性表的链式存储表示。 (2) 键盘输入若干个数据元素(用特殊数据来标记输入数据的结束),利用链表的基本操作(前插或后插算法),建立学生成绩单链表。 (3) 键盘输入关键字值x,打印出表中所有关键字值<=x的结点数据。(用于比较的关键字字段为分数)。 (4) 输入关键字值x,删除表中所有关键字值<=x的结点。(用于比较的关键字字段为分数)。 (5) * 释放该链表(删除所有结点)。 (6) * 若要求建立的学生成绩单链表为有序表,重新编写算法和程序实现前面的要求(3)。(用于比较的字段为分数)。 练习及思考题: (1)不同类型的数据元素所对应的链式表在类型定义和操作实现上有什么异同? (2)有头结点的链式表,有什么特点?

数据结构课程实验报告-实验5

数据结构课程实验报告-实验5

HUNAN UNIVERSITY 课程实习报告 题目:四则运算表达式求值 学生姓名康小雪 学生学号 20090810310 专业班级计科三班 指导老师李晓鸿 完成日期2010-10-24

一、需求分析 1.该程序可以从通过从键盘输入一个中缀表达式,判断该表达式是否合法,若合法将 其转化为后缀表达式,并计算其结果,否则说明该表达式错误 2..输入的表达式包含数字和运算符及括号,之间用空格隔开 3.数字可以为整数和小数 4.运算结果保留两位小数 输入输出举例 输入:21+23*(12-6) 输出:21 23 12 6 -*+ 二、概要设计 在表达式中每个运算符应对应两个操作数,与二叉树中非叶子结点和叶子结点之间的关系刚好相同,于是,本题可采用二叉树来将中缀表达式变为后缀表达式。 最后用堆栈来实现后缀表达式的计算。 抽象数据类型 二叉树 ADT BiTree {

数据对象D:D是具有相同特性的数据元素集合 数据关系R: 若D为空集,则R为空集,则称BinaryTree 为空二叉树; 若D不为空集,否则R={H},H是如下二元关系: (1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2)若D-{root}≠空集,则存在D-{root}的一个划分{D1,Dr} 且D1∩Dr=空集; (3)若D1≠空集,则D1中存在唯一元素x1,∈H,且存在D1shang de guanxi H1=H;ruo Dr≠空集,则Dr中存 在唯一的元素,xr,∈H,且 存在Dr上的关系Hr∈ H;H={,,H1,Hr}; (4)(D1,{H1})是一棵符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一棵 符合本定义的二叉树,称为根的右子树基本操作P: InitBiTree(&T)

《数据结构与算法》上机实验要求

《数据结构与算法》课程实验内容与要求 一、课程简介 本课程着重讲述①线性结构、树型结构、图等典型数据结构的逻辑特点、存储结构及其相应的基本算法。②各种查找算法③典型内部排序算法。 二、实验的作用、地位和目的 数据结构是一门技术基础课,通过实验深刻理解各种逻辑结构、存储结构的特性,培养为实际问题分析其数据对象、基本操作,选择逻辑结构、存储结构灵活应用基本算法,设计出具有专业水准的应用程序的能力。 三、实验方式与要求 ①首先要求学生在课下完成问题分析、算法设计,基本完成程序设计。 ②实验时,每位学生使用一台微机,独立调试,完成程序。 ③程序调试好后,由指导教师检测运行结果,并要求学生回答相关的问题。教师评出检查成绩。 ④学生记录程序的输入数据,运行结果及源程序。 ⑤在一周内完成实验报告。 四、考核方式与实验报告要求 实验成绩由指导教师根据学生的实验完成情况、源程序质量、回答问题情况、实验报告质量、实验纪律等方面给分。 学生在实验后的一周内提交实验报告。实验报告按照首页附件中实验报告模版书写。实验报告中应包括如下内容: ?实验内容按任课教师下达的实验任务填写(具体实验题目和要求); ?实验过程与实验结果应包括如下主要内容: 算法设计思路简介 算法描述:可以用自然语言、伪代码或流程图等方式 算法的实现和测试结果:包括算法运行时的输入、输出,实验中出现的问题及解决办法等 ?源程序清单与实验结果或其它说明可打印,并装订在实验报告首页之后。 ?实验报告雷同者,本次实验成绩为0分或雷同实验报告平分得分

五、实验的软硬件环境 硬件环境:PⅡ以上微型计算机 软件环境:Windows98/2000, VC++6.0或turbo C 六、实验内容安排 实验一线性表应用 实验时间:2016年3月14日1-4节(地点:7-215) 实验目的:理解线性表的逻辑特点;掌握顺序表、链表存储结构,以及线性表的基本操作,如插入、删除、查找,以及线性表合并等操作在顺序存储结构和链式存储结构上的实现算法,并能够在实际问题背景下的灵活运用线性表来解决问题,实现相应算法。 具体实验题目与要求:(任课教师根据实验大纲自己指定) 每位同学可从下面题目中选择1-2题实现: 1.一元稀疏多项式简单的计算器 1)问题描述:用线性表表示一元稀疏多项式,设计一个一元多项式运算器 2)要求: (1)采用单链表存储结构一元稀疏多项式 (2)输入并建立多项式 (3)输出多项式 (4)实现多项式加、减运算 2.单链表基本操作练习 1)问题描述:在主程序中提供下列菜单: 1…建立链表 2…连接链表 3…输出链表 0…结束 2)实验要求:算法中包含下列过程,分别完成相应的功能: CreateLinklist(): 从键盘输入数据,创建单链表 ContLinklist():将前面建立的两个单链表首尾相连 OutputLinklist():输出显示单链表 3.约瑟夫环问题 1)问题描述:有编号为1, 2…n 的n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数m,从第一个人按顺时针方向自1开始报数,报到m者出列,不再参加报数,这时将出列者的密码作为m,从出列者顺时针方向的下一人开始重新自1开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。 2)要求: 采用顺序和链式两种存储结构实现 实验报告格式及要求:按附件中实验报告模版书写。(具体要求见四)

数据结构实验报告3543435

合肥师范学院实验报告册 2013 / 2014 学年第2 学期 系别计算机科学与技术系 实验课程数据库原理 专业计算机软件 班级软件一班 姓名周锦 学号1210431081 指导教师潘洁珠

实验一——数据库基本操作 一、实验目的 1.熟悉MS SQL SERVER运行界面,掌握服务器的基本操作。 2.掌握界面操作方法完成用户数据库建立、备份和还原。 3.建立两个实验用的数据库,使用企业管理器和查询分析器对数据库和表进行基本操作。 二、实验预习内容 在认真阅读教材及实验指导书的基础上,上机前请预习以下内容,并在空白处填写相应的步骤或命令。 1.熟悉SQL SERVER 2000 的运行环境,练习服务器基本操作:打开、停止、关闭。 2.使用SQL SERVER 2000 中的企业管理器完成以下任务。 数据库名称:STC 表:STU(sno char(9), sname varchar(50), ssex char(2) , sage int, sdept char(2) ); COUTSES(cno char(3), cname varchar(50), cpno char(3), credit int ); SC(sno char(9), cno char(3), grade int ); 说明:以上为表结构,以sno char(9)为例,说明sno属性设置为字符类型,宽度为9,int指整型数据。 1)建立数据库STC,分别建立以上三张表,并完成数据录入。(表结构及数据参见教材) 建立数据库:数据库→右击鼠标→新建数据库,出现如上图所示的框,然后填上所建数据库的名称。

数据结构上机实验5

数据结构上机实验(五)递归 班级:学号:姓名: 上机时间:地点: 一、实验目的 1.理解递归的定义和递归模型。 2.掌握递归设计的一般方法,能用递归算法解决一些较复杂应用问题。 二、实验内容 1.编写程序求解皇后问题 要求:(1)皇后的个数n由用户输入,其值不能超过20; (2)采用递归方法求解。 2.编写一个程序求解背包问题 三、实验过程 1.了解常用函数所在的头文件 stdlib.h stdlib 头文件里包含了C语言的一些函数 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五种类型、一些宏和通用工具函数。类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX 和MB_CUR_MAX等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。具体的内容你自己可以打开编译器的include目录里面的stdlib.h头文件看看。 conio.h conio.h不是C标准库中的头文件。 conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 &表示引用传递。在函数参数表中,出现带&这个的形参,表示引用传递。2.程序实现(以下代码仅起参考作用) (1)求解皇后问题 #include #include const int N=20; //最多皇后个数 int q[N]; //存放各皇后所在的行号 int cont=0; //存放解个数 void print(int n) //输出一个解 { cont++; int i; printf(" 第%d个解:",cont);

相关文档
相关文档 最新文档