数据结构实验四A

合集下载

山东大学数据结构第四次实验实验报告

山东大学数据结构第四次实验实验报告

实验4 排序的编程与实现实验目的:掌握常用的排序方法,并掌握C语言实现排序算法的方法;了解各种排序方法过程及依据原则,并掌握各种排序方法的时间复杂度和稳定性的分析方法。

实验原理:参照课本p.220页内容中的 Figure7.2;课本p.223页内容中的Figure7.4;p.228,Figure7.8;p.232-233, Figure7.9-7.10; p240-243, Figure 7.12-7.15.实验内容:统计成绩【问题描述】:给出n个学生的考试成绩表,每条信息由姓名和分数组成,利用排序算法完成以下任务:1)按照分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。

2)按照名次列出每个学生的姓名和分数【要求】学生的考试成绩需要从键盘输入数据建立,同时要设计输出格式。

实验要求:1)能够采用常用的排序算法中的一种实现以上两个任务;实验步骤:一、实验源程序#include<stdio.h>#include <string.h>#include<stdlib.h>#include <conio.h>void Input(int n); \\实现从键盘输入学生姓名和分数的功能void Ranking(int n); \\实现根据学生成绩进行排序的功能struct student \\结构体,存放学生姓名及分数{char name[8];int score;} R[101];int main ( ) \\主程序{int x;printf("请输入需要录入信息的学生个数(不超过100): ");scanf ("%d",&x);Input(x);printf("学生成绩排名如下:\n ");printf(" 排名学生姓名成绩\n ");Ranking(x);getch();return 0;}void Input(int n) \\从键盘输入学生姓名和分数{int i;printf("请输入学生的姓名和成绩: \n");for (i=0; i<n; i++){printf ("学生姓名:");scanf ("%s", R[i].name);printf ("此学生的成绩:");scanf ("%d", &R[i].score);}}void Ranking(int n) \\根据学生成绩进行排序{int num=1,number=0, i, j, max=0;for (i=0; i<n; i++) \\外循环,将学生成绩从高到低进行排序{max=i;for (j=i+1; j<n; j++){if (R[j].score>R[i].score) \\内循环,如果排在后面的分数高于前面的,则进行结构体内容互换{max=j;R[100]=R[max];R[max]=R[i];R[i]=R[100];}}number=number+1; \\记录学生排名名次if ((i>0)&&(R[i].score<R[i-1].score)){num=number;}if(num==1)printf(" %3d %s%6d\n", num, R[i].name, R[i].score);elseprintf(" %4d %s%6d\n", num, R[i].name, R[i].score);}}二、实验结果①从键盘上输入学生姓名和分数信息,这里选择输入5个学生信息(上限人数程序中已经设置为100)。

数据结构实验四报告

数据结构实验四报告

实验日期:_______________ 实验指导老师:
实验4 无向图的深度优先搜索
一、实验目的和实验环境
【实验目的】
1、了解图的定义、特点,区分无向图和有向图的概念;
2、了解图的数据结构和搜索方法;
3、掌握无向图的邻接矩阵、邻接表的表示方法;
4、写出无向图的深度优先搜索程序。

【实验环境】VC++6.0
二、理论依据
邻接多重表是无向图的一种很有效链式存储结构,在邻接表中容易求得顶点和边的各种信息。

除了在边结点中增加一个标志域外,邻接多重表所需的存储量和邻接表相同。

三、实验内容
设无向图G有n个点e条边,写一算法建立G的邻接多表,并按照深度优先搜索输出顶点,要求该算法时间复杂性为O(n+e),且除邻接多表本身所占空间之外只用O(1)辅助空间。

四、实验步骤
1、了解图的定义、特点,区分无向图和有向图的概念;
2、了解图的数据结构和搜索方法;
3、掌握无向图的邻接矩阵、邻接表的表示方法;
4、写出无向图的深度优先搜索程序
五、实验结果
1.源代码如下:
实验日期:_______________ 实验指导老师:
2.运行界面截图如下:
六、小结
1、在创建邻接多重表时,由于邻接多重表的数据类型为字符型,键盘输入总是很难控制。

这时可以通过人为设置函数过滤去键盘输入中的空格。

2、在邻接多重表上,各种基本操作的实现和邻接表相似。

3、在邻接多重表中,所有依附于同一顶点的边串联在同一链表中。

数据结构实验报告4(中央电大)

数据结构实验报告4(中央电大)

实验报告(四)专业名称 课程名称批改教师主持教师实验成绩校外评阅教师实验名称 图的存储方式和应用使用主要设备 PC, VC++6.0 实验要求 1.掌握图的存储结构,了解它的应用; 2.理解图的"最短路径"计算方法,了解相关的程序设计技术。

实验报告内容:实验4.1 建立图的邻接矩阵图4-1* 设计程序代码如下:#include<stdio.h>#define MaxVertexNum 5#define MaxEdgeNum 20#define MaxValue 1000typedef int VertexType;typedef VertexType vexlist [MaxVertexNum];typedef int adjmatrix [MaxVertexNum] [MaxVertexNum];void Createl(vexlist Gv,adjmatrix GA,int n,int e){int i,j,k,w;printf("输入%d个顶点数据\n",n);for(i=0;i<n;i++) scanf("%d",&Gv[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j) GA[i][j]=0;else GA[i][j]=MaxValue;}Printf("输入一条边的两端点序号i和j及边上的权w\n");printf("输入%d条无向带权边\n",e);for(k=1;k<=e;k++){scanf("%d%d%d",&i,&j,&w);GA[i][j]=GA[j][i]=w;}}void main(){vexlist vl;adjmatrix a;Createl(vl,a,5,8);}????????1。

数据结构实验报告4

数据结构实验报告4

数据结构实验报告——实验4学号::得分:______________一、实验目的1、复习线性表的逻辑结构、存储结构及基本操作;2、掌握顺序表和(带头结点)单链表;3、了解有序表。

二、实验容1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:(1)OrderInsert(&L, e, int (*compare)(a, b))//根据有序判定函数compare,在有序表L的适当位置插入元素e;(2)OrderInput(&L, int (*compare)(a, b))//根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;(3) OrderMerge(&La, &Lb, &Lc, int (*compare)())//根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。

2、(必做题)请实现:(1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0;(2)两个升幂多项式的相加。

三、算法描述(采用自然语言描述)1.创建带头节点的链表,输入两个有序表数据La Lb归并两个有序表得有序表Lc输出三个有序表输入需插入数据e将e插入有序表Lc输出插入e后的Lc2.创建链表按指数升序输入多项式得序数和指数输出多项式按指数升序输入第二个多项式得序数和指数两个多项式相加输出第二个多项式和两个多项式得和四、详细设计(画出程序流程图)1.2.五、程序代码(给出必要注释)1.#include<stdio.h>#include<malloc.h>typedef struct LNode{int date;struct LNode *next;} LNode,*Link;typedef struct LinkList{Link head;//头结点int lenth;//链表中数据元素的个数} LinkList;int compare (LinkList *L,int e)//有序判定函数 compare {int Lc=0;Link p;p=L->head;p=p->next;while(p!=NULL){if(e>p->date){p=p->next;Lc++;}elsereturn Lc;}return Lc;}void OrderInsert (LinkList *L,int e,int (*compare)())//根据有序判定函数compare,在有序表L 的适当位置插入元素e;{Link temp,p,q;int Lc,i;temp=(Link)malloc(sizeof(LNode));temp->date=e;p=q=L->head;p=p->next;Lc=(*compare)(L,e);if(Lc==L->lenth){while(q->next!=NULL){q=q->next;}q->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;q=q->next;}q->next=temp;temp->next=p;}++L->lenth;}void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)())//根据有序判定函数 compare ,将两个有序表 La 和 Lb 归并为一个有序表{int i,Lc=0;Link temp,p,q;q=La->head->next;while(q!=NULL){p=Lb->head;temp=(Link)malloc(sizeof(LNode));temp->date=q->date;Lc=(*compare)(Lb,q->date);if(Lc==Lb->lenth){while(p->next!=NULL){p=p->next;}p->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;}temp->next=p->next;p->next=temp;}q=q->next;++Lb->lenth;}}LinkList *Initialize (LinkList *NewList){int i;Link temp;NewList=(LinkList *)malloc((2+1)*sizeof(LinkList));for(i=0; i<2+1; i++){temp=(Link)malloc(sizeof(LNode));temp->date=0;temp->next=NULL;(NewList+i)->head=temp;(NewList+i)->lenth=0;}return NewList;}void Insert (LinkList *NewList){int a,i;char c;printf("在第1个表中插入数据,输入“ N ”再对下个表插入数据 \n");for(i=0; i<2; i++){while(1){scanf("%d",&a);c=getchar();if(c=='N'){if(i<2-2)printf("在第 %d个表中插入数据,输入“ N ”再对下个表插入数据 \n",i+2); else if(i==2-2)printf("在第 %d个表中插入数据,输入“ N ”结束。

数据结构实验四

数据结构实验四

数据结构实验报告第四次实验一、实验目的1、复习线性表的逻辑结构、存储结构及基本操作;2、掌握顺序表和(带头结点)单链表;3、了解有序表。

二、实验内容1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:(1)OrderInsert(&L, e, int (*compare)(a, b))//根据有序判定函数compare,在有序表L 的适当位置插入元素e;(2)OrderInput(&L, int (*compare)(a, b))//根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;(3)OrderMerge(&La, &Lb, &Lc, int (*compare)())//根据有序判定函数compare,将两个有序表La 和Lb 归并为一个有序表Lc。

2、(必做题)请实现:(1)升幂多项式的构造,升幂多项式是指多项式的各项按指数升序有序,约定系数不能等于0,指数不能小于0;(2)两个升幂多项式的相加。

三、算法描述(采用自然语言描述)1、创建带头节点的链表,输入两个有序表数据La、Lb,归并两个有序表得有序表Lc,输出三个有序表。

输入需插入数据e,将e 插入有序表Lc,输出插入e 后的Lc。

2、创建链表,按指数升序输入多项式得序数和指数,输出多项式。

按指数升序输入第二个多项式得序数和指数,两个多项式相加,输出第二个多项式和两个多项式的和。

四、详细设计(画出程序流程图)1、2、五、程序代码(给出必要注释)1、#include<stdio.h>#include<malloc.h>typedef struct LNode{int date;struct LNode *next;}LNode,*Link;typedef struct LinkList{Link head;int lenth;}LinkList;int compare (LinkList *L,int e) {int Lc=0;Link p;p=L->head;p=p->next;while(p!=NULL){if(e>p->date){p=p->next;Lc++;}elsereturn Lc;}return Lc;}void OrderInsert (LinkList *L,int e,int (*compare)()){Link temp,p,q;int Lc,i;temp=(Link)malloc(sizeof(LNode));temp->date=e;p=q=L->head;p=p->next;Lc=(*compare)(L,e);if(Lc==L->lenth){while(q->next!=NULL){q=q->next;}q->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;q=q->next;}q->next=temp;temp->next=p;}++L->lenth;}void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)()){int i,Lc=0;Link temp,p,q;q=La->head->next;while(q!=NULL){p=Lb->head;temp=(Link)malloc(sizeof(LNode));temp->date=q->date;Lc=(*compare)(Lb,q->date);if(Lc==Lb->lenth){while(p->next!=NULL){p=p->next;}p->next=temp;temp->next=NULL;}else{for(i=0; i<Lc; i++){p=p->next;}temp->next=p->next;p->next=temp;}q=q->next;++Lb->lenth;}}LinkList *Initialize (LinkList *NewList){int i;Link temp;NewList=(LinkList *)malloc((2+1)*sizeof(LinkList));for(i=0; i<2+1; i++){temp=(Link)malloc(sizeof(LNode));temp->date=0;temp->next=NULL;(NewList+i)->head=temp;(NewList+i)->lenth=0;}return NewList;}void Insert (LinkList *NewList){int a,i;char c;printf("在第1 个表中插入数据,输入“N ”再对下个表插入数据\n");for(i=0; i<2; i++){while(1){scanf("%d",&a);c=getchar();if(c=='N'){if(i<2-2)printf("在第%d 个表中插入数据,输入“N ”再对下个表插入数据\n",i+2);else if(i==2-2)printf("在第%d 个表中插入数据,输入“N ”结束。

数据结构实验四实验报告

数据结构实验四实验报告

桂林电子科技大学2014-2015学年 第2学期数据结构 实验报告实验名称 实验四 树辅导教师意见:成绩 教师签名:院 系 计算机科学与工程学院 专业 软件工程学 号 1300330129 姓名 张涛 同 作 者 实验日期2015 年 06 月 26 日一、实验目的1.了解树二、实验具体内容1、实验题目1:(1)题目 树(2)分析实验代码:#include<iostream>#include<stdio.h>#include<conio.h>using namespace std;typedef struct btnode {int data;btnode *Lchild,*Rchild;}*Btnode;void Creat(Btnode & t) {int ch; cin>>ch;if(ch==0) t=NULL;else {btnode *p=new btnode;p->data=ch; t=p;Creat(t->Lchild);Creat(t->Rchild);} }void Preorder(Btnode & p) {if(p!=NULL) {cout<<p->data<<",";Preorder(p->Lchild);Preorder(p->Rchild); } } void Midorder(Btnode & p) {if(p!=NULL) {Midorder(p->Lchild);cout<<p->data<<",";Midorder(p->Rchild); } } void Folorder(Btnode & p) {if(p!=NULL) {Folorder(p->Lchild);Folorder(p->Rchild);cout<<p->data<<","; }} void main() {btnode *head=new btnode;cout<<"请输入数据:";Creat(head);cout<<"前序遍历:";Preorder(head);cout<<endl;cout<<"中序遍历:";Midorder(head);cout<<endl;cout<<"后序遍历:";Folorder(head);getch(); }三、实验小结。

数据结构实报告实验四

数据结构实报告实验四

数据结构实验报告专业:信科10-4姓名:纵兆丹学号:08103575一、实验目的1 熟练掌握顺序搜索、折半搜索和索引搜索等基本搜索算法,熟悉这些算法适合在何种存储结构下实现;2 熟练掌握二叉排序树的特性、建立方法以及动态搜索算法;3 熟练掌握散列表的特点及构造方法。

二、实验内容基本题1、实现基于有序顺序表的折半搜索。

2、设单链表的结点是按关键字的值从小到大排列的,试写出对此表的搜索程序并调试。

三、实验过程和方法1、程序代码基础题1#include <iostream.h>#include <conio.h>int Search_Bin(int *a,int key,int n){//在有序表a中折半查找其关键字等于key的数据数据元素,若找到,则函数值为//该元素在表中的位置,否则为0int low=1;int high=n;int mid;while(low<=high){mid = (low+high)/2;if(key==a[mid])return mid;else if(key<a[mid])high=mid-1;elselow=mid+1;}return 0;}//Search_Binvoid main(){int a[11];int x;for(int i=1;i<=10;i++){a[i]=i;}cout<<"请输入您想查找的元素值(请在1—10中选择):"<<endl;cin>>x;cout<<"您输入的元素的位置为:"<<endl;cout<<Search_Bin(a,x,10)<<endl;getch();}基础题2#include <iostream>#include <conio.h>#include <list>using namespace std;void disp(list<int> List){list<int>::iterator a;for(a=List.begin(); a != List.end(); a++)cout<<*a<<" ";cout<<endl;}//dispint Search(list<int> List,int key){list<int>::iterator b;int i=1;for(b=List.begin(); b!= List.end(); b++){if(key==*b){return i;}i++;}return 0;}//Searchvoid main(){list<int> L;int m[100];int i=0;cout<<"请输入您要建立的链表的各个节点的关键字,以0为结束!"<<endl; do{cin>>m[i++];}while(m[i-1]!=0);for(int j=0;j<i-1;j++){L.push_back(m[j]);cout<<"插入成功!"<<endl;}L.sort();cout<<"单链表节点顺序为:"<<endl;disp(L);int n,x;do{cout<<"1,查找;2,退出。

数据结构-实验4

数据结构-实验4

《数据结构》实验报告年级_2012级__ 学号_ 姓名 __ 成绩______专业_计算机科学与技术实验地点___指导教师__实验项目实验四串实验性质设计性实验日期:一、实验目的:1、掌握串的定义及其基本操作的实现。

2、掌握链表及其基本操作的实现。

3、通过上机实践进一步加深对串的顺序存储方式及链式存储方式的理解。

4、通过上机实践加强利用数据结构解决实际应用应用问题的能力。

二、实验内容与要求:1、实验题目一:顺序串的定义及其操作算法的实现要求:编程实现串的类型定义及串的初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。

2、实验题目二:文本加密和解密要求:掌握每一种串操作的一般函数的实现及其应用。

三、实验问题描述一个文本串可用事先给定的字母映射表进行加密。

例如,设字母映射表为:abcdefghijklmnopqrstuvwxyzngzqtcobmuhelkpdawxfyivrsj则字符串“encrypt”被加密为“tkzwsdf”。

设计一个程序将输入的文本串进行加密后输出,然后进行解密输出。

四、实验步骤1.实验问题分析这里用到了c语言里的while 语句、for语句、if语句以及指针2.功能(函数)设计void Encrypt(char *pszSrc, char *pszEncrypt){char *p1;char *p2;int i=0;int j=0;p1=(char *)CharArray1;p2=(char *)CharArray2;cout<<"请输入要加密的字符串\n";fflush(stdin);cin.getline(pszSrc, 100);}五、实验结果(程序)及分析#include<iostream>using namespace std;const char CharArray1[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};const char CharArray2[26]={'n','g','z','q','t','c','o','b','m','u','h','e','l','k','p','d','a','w','x','f','y','i','v','r','s','j'};void Encrypt(char*pszSrc,char*pszEncrypt){char*p1;char*p2;int i=0;int j=0;p1=(char*)CharArray1;p2=(char*)CharArray2;cout<<"请输入要加密的字符串\n";fflush(stdin);cin.getline(pszSrc,100);i=0;j=0;while(*(pszSrc+i)!='\0'){for(j=0;j<26;j++){if(*(pszSrc+i)==*(p1+j)){*(pszEncrypt+i)=*(p2+j);break;}else{;}}i++;}*(pszEncrypt+i)='\0';}void Decrypt(char*pszSrc,char*pszDecrypt) {char*p1;char*p2;int i=0;int j=0;p1=(char*)CharArray1;p2=(char*)CharArray2;cout<<"请输入一行已加密的字符串:\n"; fflush(stdin);cin.getline(pszSrc,100);i=0;j=0;while(*(pszSrc+i)!='\0'){for(j=0;j<26;j++){if(*(pszSrc+i)==*(p2+j)){*(pszDecrypt+i)=*(p1+j);break;}else{;}}i++;}*(pszDecrypt+i)='\0';}int main(){char*pszSrc;char*pszDest;int select;int i=0;int j=0;if((pszSrc=new char[100])==NULL){cout<<"申请内存空间失败,程序退出!\n";exit(1);}if((pszDest=new char[100])==NULL){cout<<"申请内存空间失败,程序退出!\n";exit(1);}while(1){cout<<"请选择加密或解密(1.加密2.解密0.退出):";cin>>select;if(1==select){Encrypt(pszSrc,pszDest);cout<<"加密后的字符串\n";i=0;while(*(pszDest+i)!='\0'){cout<<*(pszDest+i);i++;}cout<<endl;}else if(2==select){Decrypt(pszSrc,pszDest);cout<<"解密后的字符串\n";i=0;while(*(pszDest+i)!='\0'){cout<<*(pszDest+i);i++;}cout<<endl;}else if(0==select){break;}else{cout<<"你没有输入正确的选择,请重新选择:";}}delete[]pszSrc;delete[]pszDest;return0;}六、结论与分析在本次实验中掌握了串的各种操作,以及其实际作用,掌握串的定义及其基本操作的实现和掌握链表及其基本操作的实现。

《数据结构》实验报告查找

《数据结构》实验报告查找

实验四——查找一、实验目的1.掌握顺序表的查找方法,尤其是折半查找方法;2.掌握二叉排序树的查找算法。

二、实验内容1.建立一个顺序表,用顺序查找的方法对其实施查找;2.建立一个有序表,用折半查找的方法对其实施查找;3.建立一个二叉排序树,根据给定值对其实施查找;4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。

三、实验预习内容实验一包括的函数有:typedef struct ,创建函数void create(seqlist & L),输出函数void print(seqlist L),顺序查找int find(seqlist L,int number),折半查找int halffind(seqlist L,int number)主函数main().实验二包括的函数有:结构体typedef struct,插入函数void insert(bnode * & T,bnode * S),void insert1(bnode * & T),创建函数void create(bnode * & T),查找函数bnode * search(bnode * T,int number),主函数main().四、上机实验实验一:1.实验源程序。

#include<>#define N 80typedef struct{int number; umber;for(i=1;[i].number!=0;){cin>>[i].name>>[i].sex>>[i].age;++;cout<<endl;cin>>[++i].number;}}umber<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;}umber==number)return i;}umber)return mid;elseif(number<[mid].number)high=mid-1;elselow=mid+1;}return 0;}void main(){int i,number;seqlist L;create(L);print(L);cout<<"折半查找:"<<endl;cout<<"输入学生学号:";cin>>number;if((i=halffind(L,number))!=0)cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;elsecout<<"失败!"<<endl;cout<<"顺序查找:"<<endl;cout<<"输入学生学号:";cin>>number;if((i=find(L,number))!=0)cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;elsecout<<"失败!"<<endl;}实验二:#include<>typedef struct{int number; 立二叉排序树"<<"\n\t2.插入学生信息"<<"\n\t3.查找学生信息"<<endl;cout<<"选择:";cin>>choice;switch(choice){case 1:{create(T);cout<<"成功建立!"<<endl;};break;case 2:{insert1(T);cout<<"插入成功!"<<endl;};break;case 3:{cout<<"输入待查学生的学号:";cin>>number;p=search(T,number);if(p)cout<<p-><<"\t"<<p-><<"\t"<<p-><<"\t"<<p-><<endl;elsecout<<"查找失败!"<<endl;};break;}cout<<"Continue(Y/N):";cin>>ctinue;if(ctinue=='y'||ctinue=='y')flag=1;elseflag=0;}}2.实验结果(截图)。

数据结构实验四

数据结构实验四

数据结构实验报告实验名称:实验4——排序1.实验要求1 实验目的通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。

2 实验内容使用简单数组实现下面各种排序算法,并进行比较。

排序算法:1、插入排序2、希尔排序3、冒泡排序4、快速排序5、简单选择排序6、堆排序(选作)7、归并排序(选作)8、基数排序(选作)9、其他要求:1、测试数据分成三类:正序、逆序、随机数据2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。

3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)4、对2和3的结果进行分析,验证上述各种算法的时间复杂度编写测试main()函数测试线性表的正确性。

2. 程序分析2.1 存储结构存储结构:数组2.2 关键算法分析1、关键算法:比如插入、删除等基本算法的思想,或是约瑟夫问题的基本思想等,要求使用自然语言描述或伪代码描述。

A直接插入排序基本思想每次将一个待排序的记录按其关键码的大小插入到一个已经排序好的有序序列中,直到全部记录排序好。

1)构造初始有序序列2)找到插入的位置设置r[0]为“哨兵”,从后向前查找有序区,边查找边后移,直到找到合适的位置,将r[0]插入。

最好情况正序序列:比较移动最坏情况逆序序列:比较移动平均情况时间复杂度O(n2) 空间复杂度O(1)B希尔排序基本思想将待排序的记录集分成多个子集,分别对这些子集进行排序,待整个序列基本有序时,在对记录进行一次直接插入排序。

具体排序过程设待排序对象序列有n 个记录,先取d < n,比如d= n/2 作为间隔, 将全部对象分为d 个子序列, 对每一个子序列中分别施行直接插入排序。

然后缩小间隔d, 例如取d =d/2,重复上述的子序列划分和排序工作。

直到最后取d = 1, 将所有对象放在同一个序列中排序为止。

C起泡排序基本思想两两比较相邻的记录,如果反序,则交换位置,直到没有反序的记录为止。

数据结构 实验报告

数据结构 实验报告

数据结构实验报告数据结构实验报告一、引言数据结构是计算机科学中非常重要的一门课程,它涉及到数据的存储、组织和管理等方面。

通过实验学习,我们可以更好地理解和掌握不同的数据结构,提升我们在编程中解决实际问题的能力。

二、实验目的本次实验的主要目的是通过实际操作,加深对数据结构的理解,学习并掌握不同数据结构的特点和应用场景,提高编程能力。

三、实验内容1. 实验环境的搭建在开始实验之前,我们需要搭建相应的实验环境。

首先,我们选择合适的集成开发环境(IDE),如Eclipse或IntelliJ IDEA,并安装好Java Development Kit(JDK)。

然后,根据实验要求,下载并安装相应的数据结构库或框架。

2. 实验一:线性表线性表是最基本且最常用的数据结构之一,它可以用于存储一系列具有相同数据类型的元素。

实验中,我们需要实现一个线性表的基本操作,包括插入、删除、查找、修改等。

3. 实验二:栈和队列栈和队列是两种常用的数据结构,它们都是线性表的衍生结构,但在操作上有一些特殊的限制。

实验中,我们需要实现栈和队列的基本操作,并比较它们在不同场景下的优劣。

4. 实验三:树和二叉树树是一种非线性的数据结构,它以分层的方式存储数据。

二叉树是树的一种特殊情况,其中每个节点最多只有两个子节点。

实验中,我们需要实现树和二叉树的构建和遍历算法,并掌握它们在实际问题中的应用。

5. 实验四:图图是一种非线性的数据结构,由节点和边组成。

实验中,我们需要实现图的构建和遍历算法,并应用它们解决实际的图相关问题。

四、实验结果与分析通过实验,我们得到了以下结果和分析:1. 在线性表实验中,我们成功实现了插入、删除、查找和修改等基本操作,并验证了其正确性和效率。

2. 在栈和队列实验中,我们对比了它们在不同场景下的应用,发现栈适用于后进先出(LIFO)的情况,而队列适用于先进先出(FIFO)的情况。

3. 在树和二叉树实验中,我们掌握了树和二叉树的构建和遍历算法,并应用它们解决了一些实际问题,如树形结构的存储和搜索。

数据结构实验 实验四

数据结构实验 实验四

设计四查找和排序一、设计目的1.掌握顺序查找,二分法查找,分块查找的算法;2.掌握各种排序算法及其性能的比较。

二、设计内容1.任务描述任务1:编写一个程序输出在顺序表{13,22,35,43,54,68,71,82,98,1005}中采用顺序方法和折半方法查找某个关键字的过程。

任务2:编写一个程序实现直接插入排序过程,并输出{94,28,57,66,35,84,63,42,71,10}的排序过程。

任务3:编写一个程序实现快速排序算法,并输出{94,28,57,66,35,84,63,42,71,10}的排序过程。

2.问题的表示方案使用一个顺序表存储所有输入数据,一个整型变量存储数据长度3.主要数据类型与变量int data[MAXSIZE];int Count;4.算法或程序模块任务1:void Sequence(ostream &out, int key)功能:顺序查找void Half(ostream &out, int key)功能:折半查找任务2:void InsertSort(ostream &out)功能:直接插入排序任务3:int Partition(int low, int high)功能:把待排序数组分为两部分,使基准元素左边的元素都小于基准元素,右边的都大于基准元素。

void QuickSort(ostream &out, int left, int right)功能:快速排序三、测试1.方案任务1:测试方案:输入表中存在的元素,输入表中不存在的元素测试数据:顺序表{13,22,35,43,54,68,71,82,98,1005},key=68,key=32。

任务2、3:测试数据:数组{94,28,57,66,35,84,63,42,71,10}2.结果四、总结与讨论本设计还存在的问题有:1、使用int型的一维数组存储数据,未考虑数据不为整型等情况。

《数据结构》 实验报告4

《数据结构》 实验报告4

xxx实验报告课程名称数据结构实验名称实验四排序操作系部班级姓名学号实验时间2012 年12月10日时分~时分地点机位评语指导教师:成绩一、实验目的1. 掌握常用的排序方法,并掌握用高级语言实现排序算法的方法;2. 深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用;3. 了解各种方法的排序过程及其时间复杂度的分析方法。

二、实验内容统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法:(1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;(2)按名次列出每个学生的姓名与分数。

三、实验步骤1. 定义结构体。

2. 定义结构体数组。

3. 定出主程序,对数据进行排序。

四、程序主要语句及作用1. 程序原代码如下:#include <string.h>#include "stdio.h"#include <malloc.h>#include <conio.h>typedef struct BSTNODE{int data;struct BSTNODE *lchild;struct BSTNODE *rchild;}BSTNODE;BSTNODE* initBST(int n, BSTNODE *p){if(p==NULL){p=(BSTNODE*)malloc(sizeof(BSTNODE));p->lchild=NULL;p->rchild=NULL;p->data=n;}else if(n>p->data)p->rchild=initBST(n,p->rchild);elsep->lchild=initBST(n,p->lchild);return p;}void inorder(BSTNODE *BT){if(BT!=NULL){inorder(BT->lchild);printf("%d ",BT->data);inorder(BT->rchild);}}BSTNODE *search_btree(BSTNODE *root,int key) { if (!root){printf("Emptu btree\n"); return root; }while(root->data!=key){ if(key<root->data)root=root->lchild;elseroot=root->rchild;if(root==0){ printf("Search Failure\n");break ;}} /* while(root->info!=key) */if (root !=0)printf("Successful search\n key=%d\n",root->data);return root ;} /* *search_btree(root,key) */int main(){BSTNODE *p=NULL;int i,n,sd;int a[100];printf("enter the number of nodes:");scanf("%d",&n);printf("enter the number of the tree:");for(i=0;i<n;i++){scanf("%d",&a[i]);p=initBST(a[i],p);}inorder(p);printf("\n please input search data:");scanf("%d",&sd);search_btree(p,sd);getch();return 1;}2. 运行结果截图:五、总结体会本次试验让我学习到了很多也认识到了自己的不足:1.大部分的时间都用在了编程上,主要是因为C语言掌握的问题,C语言基础不好特别是对于C语言中链表的一些定义和基本操作不够熟练,导致在编程过程中还要不断的拿着c语言的教材查找,所以今后还要对C语言多练习,多动手,多思考。

数据结构实验实训报告单

数据结构实验实训报告单

一、实验名称:数据结构实验实训二、实验时间:2023年10月25日三、实验地点:计算机实验室四、实验目的:1. 理解并掌握数据结构的基本概念和常用算法;2. 学会使用C++语言实现数据结构的操作;3. 提高编程能力和问题解决能力;4. 加深对数据结构在实际应用中的理解。

五、实验内容:1. 实验一:线性表(1)实验内容:实现线性表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义线性表的数据结构;b. 实现线性表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

2. 实验二:栈与队列(1)实验内容:实现栈和队列的基本操作,并分析其时间复杂度和空间复杂度。

(2)实验步骤:a. 定义栈和队列的数据结构;b. 实现栈和队列的入栈、出栈、入队、出队等操作;c. 分析栈和队列的时间复杂度和空间复杂度;d. 编写测试程序,验证实验结果。

3. 实验三:链表(1)实验内容:实现链表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义链表的数据结构;b. 实现链表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

4. 实验四:树与二叉树(1)实验内容:实现二叉树的基本操作,如插入、删除、查找、遍历等。

(2)实验步骤:a. 定义二叉树的数据结构;b. 实现二叉树的插入、删除、查找、遍历等操作;c. 编写测试程序,验证实验结果。

5. 实验五:图(1)实验内容:实现图的基本操作,如图的创建、添加边、查找路径等。

(2)实验步骤:a. 定义图的数据结构;b. 实现图的创建、添加边、查找路径等操作;c. 编写测试程序,验证实验结果。

六、实验心得:1. 通过本次实验,我对数据结构的基本概念和常用算法有了更深入的理解,为今后的学习和工作打下了坚实的基础。

2. 在实验过程中,我学会了使用C++语言实现数据结构的操作,提高了自己的编程能力。

3. 通过对数据结构在实际应用中的分析,我认识到数据结构在计算机科学中的重要地位,为今后的职业发展指明了方向。

数据结构实验报告(实验)

数据结构实验报告(实验)

数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容3.1 实验一:线性表的实现和应用3.1.1 设计并实现线性表的基本操作函数3.1.2 实现线性表的插入、删除、查找等功能 3.1.3 实现线性表的排序算法3.1.4 应用线性表解决实际问题3.2 实验二:栈和队列的实现和应用3.2.1 设计并实现栈的基本操作函数3.2.2 设计并实现队列的基本操作函数3.2.3 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。

北邮数据结构实验四

北邮数据结构实验四

数据结构实验报告实验名称:实验四排序——题目一学生姓名:班级:班内序号:学号:日期:2012年12月15日1.实验要求使用简单数组实现下面各种排序算法,并进行比较。

排序算法:1、插入排序2、希尔排序3、冒泡排序4、快速排序5、简单选择排序6、堆排序(选作)7、归并排序(选作)8、基数排序(选作)9、其他要求:1、测试数据分成三类:正序、逆序、随机数据2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。

3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)4、对2和3的结果进行分析,验证上述各种算法的时间复杂度编写测试main()函数测试线性表的正确性。

2. 程序分析首先,题目要求测试不同的数据,所以可以手动输入待排序元素。

其次,由于对一组数据要求用不同的排序算法来处理,所以需要一个复制函数把排序前的无序数组寄存出去,为下一次排序做准备。

再次,由于每次排序后都需要把排序后的结果打印出来,代码是一样的,根据相同的代码可以封装成一个函数的思想,所以还需增加一个打印函数。

最后,由于题目中要求计算代码的执行时间精确到微妙级,而c++库函数中的clock()函数等只能精确到毫秒级,故需调用微软公司在其多媒体Windows中提供了精确定时器的底层API支持,本实验中调用queryperformancefrequency 和queryperformancecounter函数即可满足精确到微妙级的要求。

2.1 存储结构本程序采用简单数组来储存输入的待排序数组。

2.2关键算法分析2.2.1 插入排序算法插入排序的思想是:每次从无序区取一元素将其添加到有序区中。

C++描述如下,其中形参r[]为待排序数组,n为待排序元素个数2.2.2 希尔排序算法希尔排序是一种缩小增量排序的算法,首先将待排序元素集按照一定间隔分成多个子集,分别对这些子集进行直接插入排序,整个序列部分有序。

数据结构实验报告四

数据结构实验报告四

甘肃政法学院本科生实验报告()姓名:学院:\专业:班级:13级实验课程名称:数据结构实验日期:2014年5月30日指导教师及职称:实验成绩:开课时间:2013-2014学年第二学期甘肃政法学院实验管理中心印制实验题目树形结构小组合作否姓名班级学号一、实验目的8.1实现图的邻接矩阵和邻接表储存8.2实现图的遍历算法8.3求所有深度优先遍历序列8.4用图搜索方法求解迷宫问题8.5求有向图的简单路径8.6求无向图的深度优先生成树和广度优先生成树8.7用普利姆算法求最小生成树8.8采用克鲁斯卡尔算法求最小生成树8.9采用狄克斯特拉算法求有向带权图的最短路径8.10采用弗洛伊德算法求有向带权图的最短路径二.实验环境安装了Windows7操作系统,并且安装了Microsoft Visual C++6.0。

三、实验内容与步骤1、安装Microsoft Visual C++6.0。

2打开Microsoft Visual C++6.0四实验过程:8.1实现图的邻接矩阵和邻接表储存编写一个程序algo8-1,实现不带权图和带权图的邻接矩阵与邻接表的相互转化算法、输出邻接矩阵与邻接表的运算并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向G邻接矩阵,并输出之;(2)由有向图G的邻接矩阵产生邻接表,并输出之;(3)再由(2)的邻接表产生相应的邻接矩阵,并输出之○1新建工程○2选择“Hello,world!程序”○3选择Fileview○4复制algo8-1和Graph到工程文件中。

○5把主文件大开,用exp8-1的内容覆盖到主文件○6由于main()函数被重复定义所以需要备注,把algo8-1中主函数备注掉,并且手动引入#include“algo8-1.cpp”。

○7运行程序,如下图:输入代码如下:8.2实现图的遍历算法编写一个程序algo8-2,实现实现图的遍历算法并在此基础上设计一个exp8-2.cpp程序完成如下功能:(1)输出有向图G从丁丁点0开始的深度优先遍历序列(递归算法)(2)输出有向图G从丁丁点0开始的深度优先遍历序列(非递归算法)(3)输出有向图G从丁丁点0开始的广度优先遍历序列(4)○1新建工程○2选择“Hello,world!程序”○3选择Fileview○4复制algo8-1和algo8-2和Graph到工程文件中。

北理工数据结构实验报告4

北理工数据结构实验报告4

《数据结构与算法统计》实验报告——实验四学院:班级:学号:姓名:一、实验目的1、熟悉VC 环境,学会使用C 语言利用顺序表解决实际问题。

2、通过上机、编程调试,加强对线性表的理解和运用的能力。

3、锻炼动手编程,独立思考的能力。

二、实验内容从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。

三、程序设计1、概要设计为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。

(1)抽象数据类型:ADT SqList{数据对象:D={|,1,2,,,0}i i a a ElemSet i n n ∈=≥数据关系:R1=11{,|,,1,2,,}i i i i a a a a D i n --<>∈= 基本操作:Input(Sqlist & L)操作结果:构造一个线性表L 。

output(SqList L)初始条件:线性表L 已存在。

操作结果:按顺序在屏幕上输出L 的数据元素。

BiInsertionsort (Sqlist L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行折半插入排序。

QuickSort (Sqlist L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行交换排序。

SelectSort(SqList &L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行选择排序。

}ADT SqList⑵ 宏定义#define KeyType int#define MAXSIZE 10#define ok 1#define error 0⑶主程序流程由主程序首先调用Input(L)函数创建顺序表,先调用BiInsertionsort (L)函数进行折半插入排序,调用output(L)函数显示排序结果。

再调用QuickSort (L)函数进行交换排序,调用output (L)函数显示排序结果。

国家开放大学《数据结构》课程实验报告(实验4——二叉树)参考答案

国家开放大学《数据结构》课程实验报告(实验4——二叉树)参考答案
《数据结构》课程实验报告
(实验4二叉树)
学生姓名
学 号
班 级
指导老师
实验名称
实验成绩
实验报告
实ቤተ መጻሕፍቲ ባይዱ



实验目的:
(1)根据数组tree,建立与该二叉树对应的链式存储结构。
(2)对该二叉树采用中序遍历法显示遍历结果。
实验要求:
(1)在主函数中,通过键盘输入建立设定的完全二叉树的顺序存储结构。
(2)设计子函数,其功能为将顺序结构的二叉树转化为链式结构。
(2)中序遍历采用递归算法,即中序遍历左子树、访问根结点、中序遍历右子树。




程序代码:
/*实验3.1二叉树的顺序存储结构和链式存储结构*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
/*二叉树链式存储结构结点定义*/
typedef struct BTreeNode






指导教师 日期
(3)设计子函数,其功能为对给定二叉树进行中序遍历,显示遍历结果。
(4)通过实例判断算法和相应程序的正确性。
实验基本原理:
(1)顺序存储的二叉树转化为链式存储结构,采用递归算法,递归函数的形式为Creab(tree,n,i,b),其中形参:tree为顺序存储二叉树的数组,n为二叉树的结点数,i是二叉树某结点在数组tree中的下标(初始值为1),b为要建立的链式存储二叉树结点指针。转化时,首先建立*b结点,将tree[i]的值赋给*b的数据域,再调用递归函数分别构造左子树和右子树。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构与算法分析》
实验报告书
学期:2014 - 2015 学年第 2 学期
班级:信息管理与信息系统2班
学号: 1310030217 姓名:田洪斌
实验类别:(★)基础型()设计型
实验时间:
成绩:
信息管理系
一、实验内容
实现程序,基于对称矩阵的压缩存储表示方法,实现对于以整数数据为数据元素的对称矩阵的压缩存储及按行、列下标查询特定元素等操作。

二、实验目的
1、掌握特殊矩阵的压缩存储思路和方法以及操作特点;
2、掌握特殊矩阵的存储方法以及常见操作在C语言环境中的实现方法;
3、掌握稀疏矩阵的压缩存储思路和方法以及操作特点;
4、掌握稀疏矩阵的存储方法以及常见操作在C语言环境中的实现方法;
三、需求分析
用线性表的链式结构表示来完成输入、编辑、调试、运行的全过程。

并规定:
a.手动输入行数、列数和非零元的个数
b.程序可以输入、调试、运行、显示
c.测试数据:n个顶点的行号、列号以及值
四、系统设计
1.数据结构设计
使用三元组顺序表实现稀疏矩阵的定义,稀疏矩阵的三元组顺序表的存储用的是结构体在这个结构体中行标和列标使用整型定义,而一维数组采用的是结构体这样子做方便后面功能的实现。

在整个程序中函数与函数之间采用的是调用的关系,这样是为了使程序模块化,方便以后的维护。

2.程序结构设计
(1)程序中主要函数功能:
void CreateTriTupleTable(TriTupleTable *T)/////////////////////////////////////////////稀疏矩阵的创建
void Traverse(TriTupleTable *T)///////////////////////////////////////////////////////////////稀疏矩阵的显示
void menu()/////////////////////////////////////////////////////////////////////////////////////////////菜单
void main()//////////////////////////////////////////////////////////////////////////////////////////////主函数(2)函数调用关系
见图4-1
图4-1 函数关系图
五、 调试分析
a. 算法和函数中出现了一些系统无法识别的变量,照成程序出现了错 误。

原因是没有注意算法与源程序的区别。

算法是简单的对源程序进行描述
的,是给人阅读的,所以有些变量没有定义我们就能看懂。

而程序中的变量一定要先定义才能够被引用,才能被计算机识别。

b. 在调试过程中遇到问题是利用C++程序进行调试的,找出错误并改正。

c. 学会如何调用函数。

d. 学会稀疏矩阵的存储方法以及常见操作在C 语言环境中的实现方法。

六、 测试结果
1.运行时输入正确密码进入主界面,系统根据输入的数字选项来调用相应的函数。

主要实现“功能选择”的界面,在这个界面里有显示系统的五大功能,根据每个功能前面的序号进行选择。

以下为该界面:
main
CreateT riTupleT able(Tri TupleTa
ble *T)
Travers e(TriTu pleTable
*T)
meun()
图4-2 主界面
2.当选择1录入完成输入时,运行结果如下图:
图4-3 稀疏矩阵的创建
3.当录入完成输入显示稀疏矩阵时,运行结果如下图:
图4-4稀疏矩阵的显示
七、经验和体会
本次试验利用C语言编程,完成了三元组表的建立、三元组表的输出、三元组表的转置,函数之间的调用,提升了我的C语言编程能力,同时也加深了我对数据结构中关于线性表结构有关基础概念、基本算法的理解,同时,通过程序的调试及观察分析程序运行的情况,也进一步增加了我调试程序的经验,并使我认识到了线性表的结构。

八、程序源代码
#include <stdio.h>
#define MaxSize 100
/////////////////////////////////三元组表的存储方式
typedef int DataType;
typedef struct {
DataType v;
int i, j;
}TriTupleNode;
typedef struct {
TriTupleNode data[MaxSize+1]; //三元组数组
int m, n, t; //行数列数以及非零元个数
}TriTupleTable;
/////////////////////////////////////////////稀疏矩阵的创建
void CreateTriTupleTable(TriTupleTable *T)
{
//int m, n, t;
int i;
printf("输入行数,列数以及非零元的个数:");
scanf("%d,%d,%d", &T->m, &T->n, &T->t);
for (i=1; i<=T->t; ++i)
{
printf("请输入第%d个顶点的行号列号以及值", i);
scanf("%d,%d,%d", &T->data[i].i, &T->data[i].j, &T->data[i].v);
}
}
///////////////////////////////////////////////稀疏矩阵的显示
void Traverse(TriTupleTable *T)
int i;
printf("%d %d %d\n", T->m, T->n, T->t);
for (i=1; i<=T->t; ++i)
{
printf("%d %d %d\n", T->data[i].i, T->data[i].j, T->data[i].v);
}
}
/////////////////////////////////////////////////稀疏矩阵的转置
void TransMatrix(TriTupleTable *A, TriTupleTable *B)
{
int p, q, col;
B->m = A->n;
B->n = A->m;
B->t = A->t;
if (B->t!=0)
{
q = 1;
for (col=1; col<A->n; ++col)
for (p=1; p<A->t; ++p)
{
if (A->data[p].j == col)
{
B->data[q].i = A->data[p].j;
B->data[q].j = A->data[p].i;
B->data[q].v = A->data[p].v;
++q;
}
}
}
}
///////////////////////////////////菜单
void menu()
printf("\n**********************【菜单】*********************\n");
printf("\n\t\t【1】:稀疏矩阵的创建");
printf("\n\t\t【2】:稀疏矩阵的显示");
printf("\n\t\t【3】:稀疏矩阵的转置");
printf("\n\t\t【4】:稀疏矩阵的显示");
printf("\n\t\t【5】:退出系统");
}
//////////////////////////////////主函数
void main(void)
{
TriTupleTable A, B;
int x=1,y;
menu();
while(x)
{
printf("\n请选择菜单\n");
scanf("%d",&y);
switch(y)
{
case 1: CreateTriTupleTable(&A); break;
case 2:Traverse(&A);break;
case 3:TransMatrix(&A,&B);break;
case 4:Traverse(&B);break;
case 5:x=0;break;
}
}
}。

相关文档
最新文档