数据结构实验源代码
数据结构实验代码2

数据结构实验代码2第一点:数据结构实验代码2的背景与意义数据结构是计算机科学中至关重要的一个领域,它研究如何有效地存储、组织和管理数据,以及如何高效地执行相关操作。
在现代软件开发和计算机科学教育中,理解和掌握数据结构是不可或缺的。
数据结构实验代码2,作为一个具体的实践案例,旨在帮助学生深化对数据结构理论知识的理解,通过亲自动手编写和调试代码,增强对数据结构在实际应用中的认识。
实验代码2通常涉及到复杂的数据结构,比如图(Graph)、树(Tree)的高级算法实现,比如深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra或Bellman-Ford算法)、最小生成树算法(如Prim或Kruskal算法)等。
通过对这些算法的实验实现,学生不仅能够掌握算法的工作原理,还能够理解其在解决实际问题时的效率和适用场景。
此外,数据结构实验代码2也是对学生编程能力和问题解决能力的一种锻炼。
在编写代码的过程中,学生需要考虑到算法的效率、空间复杂度,以及代码的可读性和可维护性。
这对于学生将来从事软件开发工作,具有重要的现实意义。
在当前的数字经济时代,数据结构的掌握程度直接关系到软件质量的高低和开发效率的快慢,因此,数据结构实验代码2在计算机科学与技术教育中占有举足轻重的地位。
第二点:数据结构实验代码2的关键技术与实现步骤数据结构实验代码2在技术实现上,涉及多个关键的步骤和考虑因素。
首先,学生需要选择合适的编程语言和开发环境,这对于代码的编写和调试都是非常重要的。
常见的编程语言如C/C++、Java、Python等,都具备实现复杂数据结构和算法的性能和灵活性。
接下来,是数据结构的具体实现。
这要求学生不仅要熟悉类和对象的概念,还需要能够设计出既符合数据结构特性,又能够有效实现算法逻辑的类和对象。
例如,在实现图的数据结构时,学生需要定义图的节点(Vertex)和边(Edge),并且提供添加节点、添加边、查找节点等基础操作。
数据结构试验完整代码

数据结构实验完整代码目录一、顺序存储的线性表 (2)二、单链存储的线性表 (4)三、栈 (7)四、队列 (8)五、二叉树的建立和遍历 (10)六、霍夫曼树 (11)七、图的建立和遍历 (17)图的邻接矩阵表示 (17)图的邻接表表示 (20)八、图的最小生成树 (23)九、图的最短路径 (28)十、顺序查找表 (31)十一、二叉排序树的查找 (34)十二、哈希表 (36)十三、插入排序 (41)十四、交换排序-冒泡排序 (44)十五、交换排序-快速排序 (45)十六、简单选择排序 (45)十七、堆排序 (46)一、顺序存储的线性表typedef struct{char name[10];char no[10];double grade;}Student;typedef struct{Student *elem;int length;int listsize;}SqList;void Display(SqList *L){int i;for (i=0;i<L->length ;i++){cout<<i+1<<":姓名"<<L->elem[i].name<<",学号:"<<L->elem[i].no<<",成绩:"<<L->elem[i].grade <<endl;}cout<<"请选择菜单项:";}SqList *CreateList(){SqList *L;L=(SqList*)malloc(sizeof(SqList));if(!L) cout<<"建立线性表失败!";else cout<<"建立线性表成功!";return(L);}int InitList(SqList *L){int i;char name[10],no[10];double grade;L->elem=(Student *)malloc(ListInitSize * sizeof(Student));if (!(L->elem)) cout<<"初始化表失败!";L->length = 0;L->listsize = ListInitSize;cout<<"请输入要录入信息的学生个数:"<<endl;cin>>i;if (i>(L->listsize)){L->elem =(Student *)realloc(L->elem ,i*sizeof(Student));}for (int j=0;j<i;j++){cout<<"请输入第"<<j+1<<"个学生的信息:"<<endl;cin>>name>>no>>grade;strcpy((L->elem+L->length)->name,name);strcpy((L->elem+L->length)->no,no);(L->elem+L->length)->grade =grade;L->length ++;}cout<<"信息录入完成!";return 0;}int Insert(SqList *l){Student e;int i,j;Student *newbase;cout<<"请输入要插入的位置:";cin>>j;j--;cout<<"请输入学生信息:";cin>>>>e.no>>e.grade;if(l->length==l->listsize){newbase=(Student*)realloc(l->elem,(l->listsize+ListIncreasement)*sizeof(Studen t));if(!newbase){cout<<"出错!";return 0;}l->elem=newbase;l->listsize+=ListIncreasement;}for(i=l->length;i>=j;i--){l->elem[i+1] = l->elem[i];}l->elem[j]=e;l->length++;cout<<"插入成功!";return 0;}int Delect(SqList *L){int i,j;cout<<"输入删除信息的位置:";cin>>j;j--;cout<<"删除的信息为:姓名:"<<L->elem[j].name<<",学号:"<<L->elem[j].no<<"成绩:"<<L->elem[j].grade<<endl;for(i=j+1;i<=L->length;i++){L->elem[i-1]=L->elem[i];}L->length--;cout<<"请按回车继续"<<endl;getchar();getchar();cout<<"删除成功!";return 0;}二、单链存储的线性表typedef struct Student{char name[10];char no[10];double grade;}Student;typedef struct LNode{Student data;LNode *next;}LNode,*LinkList;void CreateList(LinkList &l){l=(LinkList)malloc(sizeof(LNode));if (!l) cout<<"建立失败。
数据结构实验系统源代码(期末作业)

/* 树子系统*/#include <stdio.h>#include <malloc.h> #define MAX 100int count=0; /* 定义计算结点个数的变量*/ typedef struct tnode{char data;struct tnode *lchild,*rchild;}BT;BT *CreateBTree(){BT *t;char ch;scanf("%c",&ch);getchar();if(ch=='0')t=NULL;else{t=(BT *)malloc(sizeof(BT));t->data=ch;printf("请输入%c结点的左孩子结点:t->lchild=CreateBTree();printf("请输入%c结点的右孩子结点:t->rchild=CreateBTree();}return t;}void ShowBTree(BT *T){ if (T!=NULL){ printf("%c",T->data);if(T->lchild!=NULL){ printf("(");ShowBTree(T->lchild);if(T->rchild!=NULL){ printf(",");ShowBTree(T->rchild);}printf(")");}else",t->data);",t->data/* 用广义表表示法显示二叉树*//*当二叉树非空时*//*输入该结点数据域*//* 若其左子树非空*//* 输入左括号*//* 递归调用该函数输出其左子树各结点*/ /* 若其右子树非空*//* 输出逗号*//* 递归调用该函数输出其右子树各结点*//* 二叉树左子树为空,右子树不为空时*/ if(T->rchild!=NULL){printf("(");ShowBTree(T->lchild);if(T->rchild!=NULL){ printf(",");ShowBTree(T->rchild);} printf(")");}}}void PreOrder(BT *T){ if(T==NULL) return;else{ printf("%c",T->data);PreOrder(T->lchild);PreOrder(T->rchild);}}void InOrder(BT *T){ if(T==NULL) return;else{ InOrder(T->lchild);printf("%c",T->data);InOrder(T->rchild);}}void PostOrder(BT *T){ if (T==NULL) return;else{ PostOrder(T->lchild);PostOrder(T->rchild);printf("%c",T->data);}}void LevelOrder(BT *T){ int f,r;BT *p,*q[MAX];p=T;/* 输入左括号*//* 递归调用该函数输出其左子树各结点*/ /* 若其右子树非空*//* 输出逗号*//*递归调用该函数输出其右子树各结点*//* 先序遍历二叉树T*//*递归调用的结束条件*//* 输出结点的数据域*//*先序递归遍历左子树*//*先序递归遍历右子树*//* 中序遍历二叉树T*//* 递归调用的结束条件*//* 中序递归遍历左子树*//* 输出结点的数据域*//* 中序递归遍历右子树*//* 后序遍历二叉树T*//* 递归调用的结束条件*//* 后序递归遍历左子树*//* 后序递归遍历右子树*//* 输出结点的数据域*//* 按层次遍历二叉树T*//* 定义队头队尾指针*//* 定义循环队列,存放结点指针*if(p!=NULL){ f=1; q[f]=p; r=2; } while(f!=r) { p=q[f];printf("%c",p->data); if(p->lchild!=NULL) { q[r]=p->lchild; r=(r+1)%MAX; }if(p->rchild!=NULL) { q[r]=p->rchild; r=(r+1)%MAX; }f=(f+1)%MAX; }}/* 若二叉树非空,则根结点地址入队*//* 队列不空时 *//* 访问队首结点的数据域 */ /* 将队首结点的左孩子入队 *//* 将队首结点的右孩子入队 */void Leafnum(BT *T) /* 求二叉树叶子结点数 */ { if(T)/* 若树不为空 */{ if(T->lchild==NULL && T->rchild==NULL)count++; Leafnum(T->lchild); Leafnum(T->rchild);} }/* 全局变量 count 为计数值, 其初值为 0*/ /* 递归统计 T 的左子树叶子结点数 */ /* 递归统计 T 的右子树叶子结点数 */return rdep+1;void Nodenum(BT *T) { if(T) { count++;Nodenum(T->lchild); Nodenum(T->rchild);}} int TreeDepth(BT *T) { int ldep=0,rdep=0; 的深度 */ if(T==NULL) return 0; else { ldep=TreeDepth(T->lchild); rdep=TreeDepth(T->rchild); if(ldep>rdep)return ldep+1; else /* 若树不为空 *//* 全局变量 c ount 为计数值, 其初值为0*/ /* 递归统计 T 的左子树结点数 */ /* 递归统计 T 的右子树结点数 *//* 求二叉树深度 *//* 定义两个整型变量, 用以存放左、右子树/* 递归统计 T 的左子树深度 */ /* 递归统计 T 的右子树深度 */二叉树子系统");printf ("\n ================================================="); printf ("\n| 1——建立一个新二叉树 |"); printf ("\n| 2 --- 广义表表示法显示 |"); printf ("\n| 3 --- 先序遍历 |"); printf ("\n| 4 --- 中序遍历 |"); printf ("\n| 5 --- 后序遍历 |"); printf ("\n| 6 --- 层次遍历 |"); printf ("\n| 7 --- 求叶子结点数目 |"); printf ("\n| 8 --- 求二叉树总结点数目 |"); printf ("\n| 9——求树深度 |"); printf ("\n|0 --- 返回|");printf ("\n ================================================"); printf ("\n 请输入菜单号(0-9 ):");btree () (BT *T=NULL; char ch1,ch2,a; ch1='y';while (ch1=='y'||ch1=='Y') { MenuTree ();scanf ("%c",&ch2); getchar (); switch (ch2) {case '1':printf ("请按先序序列输入二叉树的结点: \n");printf ("说明:输入结点后按回车(’0'表示后继结点为空):\n"); printf ("请输入根结点:"); T=CreateBTree ();printf ("二叉树成功建立! ");break; case '2':printf ("二叉树广义表表示法如下: "); ShowBTree (T );break; case '3':printf ("二叉树的先序遍历序列为: "); PreOrder (T );break; case '4':printf(" 二叉树的中序遍历序列为: ");void (MenuTree ()/*显示菜单子函数*/printf ("\nInOrder(T);break;case '5':printf(" 二叉树的后序遍历序列为:");PostOrder(T);break;case '6':printf(" 二叉树的层次遍历序列为:");LevelOrder(T);break;case '7':count=0;Leafnum(T);printf("该二叉树有%~个叶子。
数据结构与算法实验源代码

数据结构与算法实验源代码数据结构与算法实验源代码1.实验目的本实验旨在通过实践,加深对数据结构与算法的理解与应用能力,掌握数据结构和算法的基本概念与原理,并能够运用所学知识解决实际问题。
2.实验材料●一台已安装好编译器的计算机●数据结构与算法实验源代码文件3.实验环境配置在实验开始之前,必须确保计算机上已安装好以下环境:●编译器(可以是C++、Java等)●数据结构与算法实验源代码文件4.实验内容及步骤4.1 实验一:线性表4.1.1 实验目的通过实现线性表的相关操作,加深对线性表及其操作的理解,并能够灵活应用。
4.1.2 实验步骤1.实现线性表的初始化函数2.实现线性表的插入操作3.实现线性表的删除操作4.实现线性表的查找操作5.实现线性表的排序操作6.实现线性表的输出操作7.编写测试代码,对线性表进行测试4.1.3 实验结果与分析进行若干测试用例,验证线性表的正确性,并分析算法的时间复杂度与空间复杂度。
4.2 实验二:栈与队列4.2.1 实验目的通过实现栈与队列的相关操作,加深对栈与队列的理解,并掌握栈与队列的应用场景。
4.2.2 实验步骤1.实现栈的初始化函数2.实现栈的入栈操作3.实现栈的出栈操作4.实现栈的查看栈顶元素操作5.实现队列的初始化函数6.实现队列的入队操作7.实现队列的出队操作8.实现队列的查看队首元素操作4.2.3 实验结果与分析进行若干测试用例,验证栈与队列的正确性,并分析算法的时间复杂度与空间复杂度。
(继续添加实验内容及步骤,具体根据实验项目和教学要求进行详细分析)5.实验附件本文档所涉及的实验源代码文件作为附件随文档提供。
6.法律名词及注释6.1 版权:著作权法所规定的权利,保护作品的完整性和原创性。
6.2 开源:指软件可以被任何人免费使用、分发和修改的一种软件授权模式。
(继续添加法律名词及注释)。
数据结构实验源代码

数据结构实验源代码第二章线性表标题:约瑟夫环描述:约瑟夫环编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。
任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
设计程序输出出列顺序。
输入:人数n 报数上限m人员记录1 (格式为:姓名学号性别年龄班级健康状况)人员记录2?…人员记录n输出:第1次报数出列的人员记录第2次报数出列的人员记录…第n次报数出列的人员记录输入样例:5 3安弥邵女 28 计43 一般宰觅男 23 计79 健康;顾健男 27 计29 一般宓顽芳女 20 计17 健康能纸垄男 18 计11 健康输出样例:顾健男27 计29 一般安弥邵女28 计43 一般能纸垄男18 计11 健康宰觅男23 计79 健康宓顽芳女20 计17 健康提示:循环表#include<>#include<>#include<>um);scanf("%s", x[i].name); scanf("%f",&x[i].score_1);scanf("%f",&x[i].score_2);scanf("%f",&x[i].score_3);ListInsert(L,i,x[i]); }Ranking(L);while(p->next!=NULL){p=p->next;printf("%ld " ,p->; printf("%s " ,p->; printf("%.2f " ,p->; printf("%.2f " ,p->; printf("%.2f " ,p->; printf("%.2f " ,p->; printf("%ld\n" ,p->;}Destroy(&L);return 0;}标题:链表上的基本操作实现描述:在单链表存储结构上实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。
数据结构完整代码简版

数据结构完整代码数据结构完整代码1. 简介数据结构是计算机科学中的一个重要概念,用于组织和管理数据的方式。
在许多实际应用中,我们需要根据不同的需求选择合适的数据结构来存储和操作数据。
本文将介绍常见的数据结构,包括数组、链表、栈、队列和树,并提供完整的代码实现示例。
2. 数组(Array)数组是一种线性数据结构,用于存储固定大小的相同类型元素的集合。
数组的元素通过索引进行访问,索引是从0开始的整数。
以下是一个简单的数组实现示例代码:```pythonclass Array:def __init__(self, size):self.size = sizeself.data = [None] sizedef get(self, index):if index < 0 or index >= self.size:return Nonereturn self.data[index]def set(self, index, value):if index < 0 or index >= self.size:return Noneself.data[index] = value```3. 链表(Linked List)链表是一种常见的动态数据结构,它由多个节点组成,每个节点包含数据和指向下一个节点的指针。
链表的特点是在内存中不连续存储,而是通过指针将各个节点连接起来。
以下是一个简单的链表实现示例代码:```pythonclass Node:def __init__(self, value):self.value = valueself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef append(self, value):new_node = Node(value)if not self.head:self.head = new_nodeelse:curr_node = self.headwhile curr_node.next:curr_node = curr_node.next curr_node.next = new_nodedef remove(self, value):curr_node = self.headif curr_node.value == value:self.head = curr_node.nextreturnwhile curr_node.next:if curr_node.next.value == value:curr_node.next = curr_node.next.nextreturncurr_node = curr_node.next```4. 栈(Stack)栈是一种基于后进先出(LIFO)原则的数据结构,只能在一端进行插入和删除操作。
数据结构源代码(C语言描述)

数据结构源代码归纳(一)2008年08月01日星期五23:46第一章绪论P8例:计算f=1!+2!+3!+…+n!,用C语言描述。
void factorsum(n)int n;{int i,j;int f,w;f=0;for (i=1;i〈=n;i++){w=1;for (j=1;j〈=i;j++)w=w*j;f=f+w;}return;}第二章线性表P16【算法2.1 顺序表的插入】int Insert(Elemtype List[],int *num,int i,Elemtype x){/*在顺序表List[]中,*num为表尾元素下标位置,在第i个元素前插入数据元素x,若成功,返回TRUE,否则返回FALSE。
*/int j;if (i<0||i>*num+1){printf("Error!"); /*插入位置出错*/return FALSE;}if (*num>=MAXNUM-1){printf("overflow!");return FALSE;} /*表已满*/for (j=*num;j>=i;j--)List[j+1]=List[j]; /*数据元素后移*/List[i]=x; /*插入x*/(*num)++; /*长度加1*/return TRUE;}P18【算法2.2 顺序表的删除】int Delete(Elemtype List[],int *num,int i){/*在线性表List[]中,*num为表尾元素下标位置,删除第i个长度,线性表的长度减1,若成功,则返回TRUE;否则返回FALSE。
*/int j;if(i<0||i>*num){printf("Error!"); return FALSE; } /*删除位置出错!*/for(j=i+1;j<=*num;j++)List[j-1]=List[j]; /*数据元素前移*/(*num)--; /*长度减1*/return TRUE; }P19 例:将有序线性表La={2,4,6,7,9},Lb={1,5,7,8},合并为Lc={1,2,4,5,6,7,7,8,9}。
数据结构与算法实验源代码

数据结构与算法实验源代码数据结构与算法实验源代码一、实验目的本实验旨在通过编写数据结构与算法的实验源代码,加深对数据结构与算法的理解,并提高编程能力。
二、实验环境本实验使用以下环境进行开发和测试:- 操作系统:Windows 10- 开发工具:IDEA(集成开发环境)- 编程语言:Java三、实验内容本实验包括以下章节:3.1 链表在本章节中,我们将实现链表数据结构,并实现基本的链表操作,包括插入节点、删除节点、查找节点等。
3.2 栈和队列在本章节中,我们将实现栈和队列数据结构,并实现栈和队列的基本操作,包括入栈、出栈、入队、出队等。
3.3 树在本章节中,我们将实现二叉树数据结构,并实现二叉树的基本操作,包括遍历树、搜索节点等。
3.4 图在本章节中,我们将实现图数据结构,并实现图的基本操作,包括广度优先搜索、深度优先搜索等。
3.5 排序算法在本章节中,我们将实现各种排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
3.6 搜索算法在本章节中,我们将实现各种搜索算法,包括线性搜索、二分搜索、广度优先搜索、深度优先搜索等。
四、附件本文档附带实验源代码,包括实现数据结构和算法的Java源文件。
五、法律名词及注释5.1 数据结构(Data Structure):是指数据对象中数据元素之间的关系。
包括线性结构、树形结构、图形结构等。
5.2 算法(Algorithm):是指解决问题的一系列步骤或操作。
算法应满足正确性、可读性、健壮性、高效性等特点。
5.3 链表(Linked List):是一种常见的数据结构,由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
5.4 栈(Stack):是一种遵循后进先出(LIFO)原则的有序集合,用于存储和获取数据。
5.5 队列(Queue):是一种遵循先进先出(FIFO)原则的有序集合,用于存储和获取数据。
5.6 树(Tree):是由节点组成的层级结构,其中一种节点作为根节点,其他节点按照父子关系连接。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实验源代码第二章线性表标题:约瑟夫环描述:约瑟夫环编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。
任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。
报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。
设计程序输出出列顺序。
输入:人数n 报数上限m人员记录1 (格式为:姓名学号性别年龄班级健康状况) 人员记录2…人员记录n输出:第1次报数出列的人员记录第2次报数出列的人员记录…第n次报数出列的人员记录输入样例:5 3安弥邵 10000001 女 28 计43 一般宰觅 10000002 男 23 计79 健康顾健 10000003 男 27 计29 一般宓顽芳 10000004 女 20 计17 健康能纸垄 10000005 男 18 计11 健康输出样例:顾健 10000003 男 27 计29 一般安弥邵 10000001 女 28 计43 一般能纸垄 10000005 男 18 计11 健康宰觅 10000002 男 23 计79 健康宓顽芳 10000004 女 20 计17 健康提示:循环表#include<string.h>#include<ctype.h>#include<malloc.h> // malloc()等#include<limits.h> // INT_MAX等#include<stdio.h> // EOF(=^Z或F6),NULL #include<stdlib.h> // atoi()#include<io.h> // eof()#include<math.h> // floor(),ceil(),abs()#include<process.h> // exit()// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSEstruct stud{char name[12];char num[12];char sex[4];int age;char clas[10];char health[16];};typedef stud ElemType;typedef struct LNode{ElemType date;struct LNode *next;}LNode,*LinkList;void CreateList2(LinkList &L,int n){ // 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表int i;LinkList p,q;L=(LinkList)malloc(sizeof(LNode)); // 生成头结点q=L;scanf("%s%s%s%d%s%s",L->,L->date.num,L->date.sex,&L->date .age,L->date.clas,L->date.health);for(i=1;i < n;i++){p=(LinkList)malloc(sizeof(LNode));scanf("%s%s%s%d%s%s",p->,p->date.num,p->date.sex,&p->date .age,p->date.clas,p->date.health);q->next=p;q=q->next;}p->next=L;}void run(LinkList L,int m){int i;LinkList p,q;p = L;while (p){for(i = 1 ;i < m;i++){q = p;p = p->next;}printf("%s %s %s %d %s %s\n",p->,p->date.num,p->date.sex,p->d ate.age,p->date.clas,p->date.health);q->next=p->next;free(p);p = q->next;if(p==p->next){break;}}printf("%s %s %s %d %s %s",p->,p->date.num,p->date.sex,p->dat e.age,p->date.clas,p->date.health);printf("\n");free(p);//要将P释放掉,应为在前面L已经被释放掉}int main(){int n,m;LinkList La;标题:学生信息管理描述:用链式存储结构实现对一个班级学生信息管理。
设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。
输入:人数n人员记录1 (格式为:学号姓名成绩1 成绩2 成绩3) 人员记录2输出:人员记录x 1 人员记录y 2 …人员记录z n输入样例:31 孙俪莉 76 78 892 章子怡 72 56 673 刘德华 56 84 90输出样例:1 孙俪莉 76 78 89 81.00 1 3 刘德华 56 84 90 76.67 2 2 章子怡 72 56 67 65.00 3#include<stdio.h>#include<stdlib.h>#define MaxSize 1000typedef struct Student{long num;char name[10];float score_1;float score_2;float score_3;float ave_score;long rank;} StudentType;typedef StudentType DataType;typedef struct Node{DataType data;struct Node *next;} SLNode;void ListInitiate(SLNode * * L) {if((*L=(SLNode*)malloc(sizeof(SLNode)))==NULL)e xit(1);(*L)->next=NULL;}int ListInsert(SLNode *L,inti,DataType x){SLNode *p,*q;int j;p=L;j=0;while(p->next!=NULL&&j<i-1){p=p->next;j++;}if(j!=i-1){printf("error");return 0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)e xit(1);q->data=x;q->next=p->next;p->next=q;return 0;}void Ranking(SLNode *L){SLNode *p,*q,*s;long i=0;p=L;while(p->next!=NULL){p=p->next;p->data.ave_score=(p->data.score_ 1+p->data.score_2+p->data.score_3 )/3;i++;}p=L;while(i--){p=L;s=p;p=p->next;q=p->next;while(p->next!=NULL){if(p->data.ave_score<q->data.ave_s core){if(q->next!=NULL) p->next=q->next;elsep->next=NULL;q->next=p;s->next=q;q=p->next;s=s->next;}else//后移{s=p;p=p->next;q=p->next;}}}p=L;i=1;while(p->next!=NULL){p=p->next;p->data.rank=i++;}}void Destroy(SLNode * *L) {SLNode *p,*p1;p=*L;while(p!=NULL){p1=p;p=p->next;free(p1);}*L=NULL;}int main(void){SLNode *L,*p;StudentType x[MaxSize];int n;int i;ListInitiate(&L);p=L;scanf("%d",&n);//班级人数for(i=1; i<=n; i++){scanf("%ld",&x[i].num);scanf("%s", x[i].name);scanf("%f", &x[i].score_1);scanf("%f", &x[i].score_2);scanf("%f", &x[i].score_3);ListInsert(L,i,x[i]);}Ranking(L);while(p->next!=NULL){p=p->next;printf("%ld" ,p->data.num);printf("%s" ,p->);printf("%.2f" ,p->data.score_1);printf("%.2f" ,p->data.score_2);printf("%.2f" ,p->data.score_3);printf("%.2f" ,p->data.ave_score);printf("%ld\n" ,p->data.rank);}Destroy(&L);return 0;}标题:链表上的基本操作实现描述:在单链表存储结构上实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。