数据结构(C语言版)实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构(C语言版) 实验报告

学院计算机科学与技术

专业*****

学号****

班级****

姓名 ***

指导教师 ****

实验1

实验题目:单链表的插入和删除

实验目的:

了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。

实验要求:

建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。

实验主要步骤:

1、分析、理解给出的示例程序。

2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测

试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。

3、修改程序:

(1)增加插入结点的功能。

(2)将建立链表的方法改为头插入法。

程序代码:

#include""

#include""

#include""

#include""

typedef struct node . .

示意图:

head

head

head

心得体会:

本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。

实验2

实验题目:二叉树操作设计和实现

实验目的:

掌握二叉树的定义、性质及存储方式,各种遍历算法。

实验要求:

采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历

的操作,求所有叶子及结点总数的操作。

实验主要步骤:

1、分析、理解程序。

2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),

如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求

所有叶子及结点总数。

实验代码

#include""

#include""

#include""

#define Max 20

ertex=a; irstedge=NULL; irstedge;

G->adjlist[i].firstedge=s; irstedge;

R[i]

留在原位

j--;

}

while(R[0].key

R[j+1]=R[0]; ey

{ ey>= ey < ,则

R[i++]=R[j]; ey<= ey > ,则

R[j--]=R[i]; ====快速排序===========

void QuickSort(SeqList R,int low,int high)

{ high]快速排序

int pivotpos; high]做一次划分,得到基准记录的位置QuickSort(R,low,pivotpos-1); ey

k=j; high]调整为大根堆,除R[low]外,其余结点均满足堆性质

int large; ey

large++; ey) n]构造为堆

int i;

for(i=n/2;i>0;i--)

Heapify(R,i,n); n]调整为大根堆

}

n]进行堆排序,不妨用R[0]做暂存单元

int i;

BuildHeap(R); n]构造为初始大根堆

for(i=n;i>1;i--){ i]进行堆排序,共做n-1趟。

R[0]=R[1]; R[1]=R[i];R[i]=R[0]; i-1]重新调整为堆,仅有R[1]可能违反堆性质。

}

}

m]和R[m+1..high]归并成有序的序列R[low..high]==

void Merge(SeqList R,int low,int m,int high)

{

int i=low,j=m+1,p=0; ey<=R[j].key) R[i++]:R[j++];

while(i<=m) high]

}

n]做一趟归并排序========

void MergePass(SeqList R,int length)

{

int i;

for(i=1;i+2*length-1<=n;i=i+2*length)

Merge(R,i,i+length-1,i+2*length-1); n]做二路归并排序=============== void MergeSort(SeqList R)

{

int length;

for(length=1;length

}

ey);

}

//==========主函数======

void main()

{

int i;

SeqList R;

input_int(R);

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

printf("\t1: Insert Sort\n");

printf("\t2: Bubble Sort\n");

printf("\t3: Quick Sort\n");

printf("\t4: Straight Selection Sort\n");

printf("\t5: Heap Sort\n");

printf("\t6: Merge Sort\n");

printf("\t7: Exit\n");

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

scanf("%d",&i); //输入整数1-7,选择排序方式

switch (i){

case 1: InsertSort(R); break; //值为1,直接插入排序case 2: BubbleSort(R); break; //值为2,冒泡法排序case 3: QuickSort(R,1,n); break; //值为3,快速排序case 4: SelectSort(R); break; //值为4,直接选择排序case 5: HeapSort(R); break; //值为5,堆排序

case 6: MergeSort(R); break; //值为6,归并排序case 7: exit(0); //值为7,结束程序

}

printf("Sort reult:");

output_int(R);

}

实验结果:

Please input num(int):10

Plase input 10 integer:265

301

751

129

937

863

742

694

相关文档
最新文档