数据结构实验习题(4)

2019-08-31 11:12

printf(\

for(j=0;j<=n-1;j++) if(matrix[k][j]

}

main( ) {

int matrix[n][n]={{max,6,1,5,max,max},{6,max,5,max,3,max},{1,5,max,max,6,4}, {5,max,max,max,max,2},{max,3,6,max,max,6},{max,max,4,2,6,max}}; prim(matrix,5); }

4. 在链式存储结构上实现有向无环图的拓扑排序算法。其中函数createadjlist的功能是实现建立有向图,函数topsort的功能是实现拓补排序。 #include \#include \#define m 100 #define n 7

#define e 8

typedef struct node1{int info;int adjvertex; struct node1 *nextarc;}glinklistnode; typedef struct node2{int vertexinfo;glinklistnode *firstarc;}glinkheadnode; void createadjlist(glinkheadnode g[ ]) {

int i,j,k; glinklistnode *p;

for(i=0;i

scanf(\

p=(glinklistnode *)malloc(sizeof(glinklistnode));p->adjvertex=j; p->nextarc=g[i].firstarc; g[i].firstarc=p; } }

void toposort(glinkheadnode g[ ]) {

int i,v,w,sum=0, indegree[n]; struct {int s[n];int top;} stack; glinklistnode *p;

for (i=0; i

for (i=0; inextarc) indegree[p->adjvertex]++; for(i=0,stack.top= -1; i

printf(\

v=stack.s[stack.top]; stack.top=stack.top-1; p=g[v].firstarc; while (p!=0) {

w=p->adjvertex;indegree[w]=indegree[w]-1;

- 16 -

if (indegree[w]==0) {stack.top=stack.top+1; stack.s[stack.top]=w;} p=p->nextarc;

} }

if(sum

main( ) {

glinkheadnode g[m]; createadjlist(g); toposort(g); }

- 17 -

实验六 排序

一、 实验目标

1. 掌握插入排序在顺序存储结构上的实现。 2. 掌握交换排序在顺序存储结构上的实现。 3. 掌握选择排序在顺序存储结构上的实现。 4. 掌握归并排序在顺序存储结构上的实现。 5. 理解基数排序在链式存储结构上的实现。

二、 实验内容

1. 插入排序在顺序存储结构上的实现。其中函数straightinsertsort的功能是实现直接插入排序,函数biinsertsort的功能是实现折半插入排序,函数shellsort的功能是实现希尔排序,库函数random的功能是产生一个随机整数且该随机数的取值范围在0到num-1,其中num是其形式参数。 #include \#include “stdlib.h” typedef int datatype;

#define m 10

struct record {int key;datatype others;}; void straightinsertsort(struct record r[ ],int n) {

int i,j; struct record temp; for(i=1;i<=n-1;i++)

{for(temp=r[i],j=i-1; j>=0; j--) if(temp.key

void biinsertsort(struct record r[ ],int n) {

int i,j,low,mid,high; struct record temp; for(i=1;i<=n-1;i++) {

low=0; high=i-1;

while(low<=high){mid=(low+high)/2;if(r[i].key>r[mid].key)low=mid+1; else high=mid-1;}

for(temp=r[i],j=i-1; j>=low; j--) r[j+1]=r[j]; r[low]=temp; }

}

void shellsort(struct record r[ ], int n) {

int i,j,h; struct record temp;

for(h=n/2;h>=1;h=h/2) for(j=h;j<=n-1;j++) {

for(temp=r[j], i=j-h; i>=0; i=i-h) if (r[i].key>temp.key) r[i+h]=r[i];else break; r[i+h]=temp; } }

- 18 -

main( )

{

struct record r[m]; int i;

for( i=0; i<=m-1; i++) r[i].key=random(100); straightinsertsort(r,m);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”); for( i=0; i<=m-1; i++) r[i].key=random(100); biinsertsort(r,m);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”); for( i=0; i<=m-1; i++) r[i].key=random(100); shellsort(r,m);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”); }

2. 交换排序在顺序存储结构上的实现。其中函数bubblesort的功能是实现冒泡排序,函数betterbubblesort的功能是实现在冒泡排序的基础上提前结束排序,函数quickpass的功能是实现一趟快速排序,函数quicksort的功能是实现快速排序。 #include \#include “stdlib.h” typedef int datatype;

#define m 10

struct record {int key;datatype others;}; void bubblesort(struct record r[ ],int n) {

int i,j; struct record temp;

for (i=0; i<=n-2; i++) for (j=0;j<=n-i-2;j++) if(r[j].key>r[j+1].key) {temp=r[j];r[j]=r[j+1];r[j+1]=temp;} }

void betterbubblesort(struct record r[ ],int n) {

int i,j,flag; struct record temp; for (i=0; i<=n-2; i++) {

for (flag=0,j=0;j<=n-i-2;j++) if(r[j].key>r[j+1].key) {temp=r[j];r[j]=r[j+1];r[j+1]=temp; flag=1;} if (flag==0) break; }

}

void quickpass(struct record r[], int s, int t, int &i) {

int j=t; struct record x=r[s]; i=s; while(i

while (ix.key) j=j-1; if (i

- 19 -

void quicksort(struct record r[ ], int s, int t) {

int k;

if (s

main( ) {

struct record r[m]; int i;

for( i=0; i<=m-1; i++) r[i].key=random(100); bubblesort(r,m);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”); for( i=0; i<=m-1; i++) r[i].key=random(100); betterbubblesort(r,0,m-1);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”); for( i=0; i<=m-1; i++) r[i].key=random(100); quicksort(r,m);

for( i=0; i<=m-1; i++) printf(“%d\\t”,r[i].key); printf(“\\n”);

}

3. 选择排序在顺序存储结构上的实现。其中函数simpleselectsort的功能是实现简单选择排序,函数createheap的功能是实现“筛选”建堆,函数heapsort的功能是实现堆排序。 #include \#include “stdlib.h” typedef int datatype;

#define m 10

struct record {int key;datatype others;};

void simpleselectsort(struct record r[],int n) {

int i,j,k; struct record temp; for(i=0;i<=n-2;i++) {

for(k=i,j=i+1;j<=n-1;j++) if (r[j].key

}

void createheap(struct record r[ ],int k,int n) {

int i=k,j=2*i+1; struct record temp=r[i]; while (j<=n-1) {

if (jr[j+1].key) j=j+1; /* 如果条件成立则调整到右子树 */ if (temp.key<=r[j].key)break; else{r[i]=r[j]; i=j; j=2*i+1;} }

r[i]=temp; }

void heapsort(struct record r[ ],int n) {

- 20 -


数据结构实验习题(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015年秋仁爱版八年级英语上册Unit 1 Topic 2导学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: