实验一顺序表与链表

合集下载

三种存储结构(顺序表,链表,静态链表)求解josuphu问题的实验报告

三种存储结构(顺序表,链表,静态链表)求解josuphu问题的实验报告

实验报告:使用三种存储结构(顺序表、链表、静态链表)求解Josephus问题一、实验目的掌握顺序表、链表和静态链表的基本操作和实现方法。

学习如何使用不同的存储结构解决同一问题,并分析其性能差异。

通过求解Josephus问题,加深对数据结构在实际问题中应用的理解。

二、实验内容问题描述:Josephus问题是著名的理论问题。

在罗马人占领乔塔帕特后,n个犹太人与他们的妻子和孩子被一个圈子所包围,圈中第一个人从1开始报数,每数到m的那个人就被杀死,然后再由他的下一个人从1开始重新报数,直到剩下最后一个人为止,那个人就被称为Josephus。

本实验要求使用顺序表、链表和静态链表三种存储结构求解Josephus问题。

顺序表求解Josephus问题:使用数组作为顺序表存储结构,通过循环遍历数组实现报数和杀人过程。

当杀死某个人时,将其后的人依次向前移动填补空位。

重复此过程直到只剩下一个人为止。

链表求解Josephus问题:使用链表作为存储结构,通过链表的遍历实现报数和杀人过程。

当杀死某个人时,将其从链表中删除。

重复此过程直到链表中只剩下一个节点为止。

静态链表求解Josephus问题:使用静态链表作为存储结构,通过数组模拟链表操作。

在静态链表中,每个节点包含数据域和游标域。

通过游标域实现节点间的链接关系。

通过遍历静态链表实现报数和杀人过程,当杀死某个人时,修改其前后节点的链接关系以删除该节点。

重复此过程直到静态链表中只剩下一个节点为止。

三、实验结果与分析实验结果:使用顺序表求解Josephus问题时,时间复杂度较高,因为每次杀人后都需要移动大量元素来填补空位。

空间复杂度较低,只需一个大小为n的数组。

使用链表求解Josephus问题时,时间复杂度较低,因为删除节点时只需修改相邻节点的指针。

空间复杂度与顺序表相当,但需要额外的指针空间来存储节点间的链接关系。

使用静态链表求解Josephus问题时,时间复杂度和空间复杂度与链表相似。

实验1顺序表和链表基本操作(学生)

实验1顺序表和链表基本操作(学生)

实验一线性表运算的实现班级学号姓名一、实验预备知识1.复习C中函数的相关内容。

2.复习如何用主函数将多个函数连在一起构成一个C完整程序。

3.复习多文件结构。

二、实验目的1.掌握线性表的顺序和链式存储结构2.熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算3.熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算三、实验要求1.编写初始化并创建线性表和输出线性表的算法。

2.编写对线性表插入和删除运算算法,要判断位置的合法性和溢出问题。

3.编写有序表的插入和删除运算算法。

4.编写一个主函数,将上面函数连在一起,构成一个完整的程序。

5.将实验源程序调试并运行,写出输入、输出结果,并对结果进行分析。

四、实验内容顺序表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.初始化并建立顺序表。

(开辟的存储空间大小为8)3.编写顺序表输出算法。

4.依次插入3,21,15三个数,分别插入在第4,6和2位置,每插入一次都要输出一次顺序表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次顺序表。

6.编写一个排序算法,对线性表中元素从小到大排列。

7.向有序表分别插入20和50,插入后表仍然有序。

(修改开辟的存储空间大小为15)单链表实验内容:1.给定的线性表为L=(12,25,7,42,19,38),元素由键盘输入。

2.建立一个带表头结点的单链表(前插入法和尾插入法都可以)。

3.编写单链表输出算法。

4.依次插入3,21,15三个数,分别插入在第4,6和12位置,每插入一次都要输出一次单链表。

5.删除第5,第3和第12个位置上的元素,每删除一个元素都要输出一次单链表。

6.编写一个排序算法,对线性表中元素从小到大排列。

7.分别删除值为25和42的元素,删除后表仍然有序。

五、实验结果给出程序清单及输入/输出结果六、总结1.实验过程中遇到的问题及解决方法2.收获北华航天工业学院《数据结构》课程实验报告实验题目:作者所在系部:作者所在专业:作者所在班级:作者学号:作者姓名:任课教师姓名:完成时间:北华航天工业学院教务处制一、实验目的1 掌握线性表的顺序和链式存储结构;2 熟练运用线性表在顺序存储方式下的初始化、创建、输出、插入和删除运算;3 熟练运用线性表在链式存储方式下的创建、输出、插入和删除运算。

实验1 顺序表及单链表

实验1 顺序表及单链表

软件技术基础实验一顺序表及单链表的使用班级:学号:姓名:日期:一、实验目的1.熟悉线性表的定义,理解顺序表基本操作。

2.会使用顺序表的基本操作求解一些简单问题。

3.掌握单链表的基本概念,理解单链表基本操作的实现。

4.会使用单链表的基本操作求解一些简单问题。

二、实验要求1.根据布置的作业编写源程序,上机验证实验结果;2.独立做实验,输入、调试所编程序;3.实验结束后,根据实验报告模板编写实验报告。

三、实验内容和步骤(1)创建一个(名为你的学号+a)工程,将所给的三个文件2.h 2.cpp 1加入到工程中,编写程序完成下列功能:1、理解1.h文件中sq_LList类的定义以及类成员函数的实现,删除main函数中的所有内容,在main函数中编写程序实现:(1)从键盘上输入5个整数,创建顺序表s1,并输出顺序表中的内容。

(2)从键盘上输入两个整数(元素的值和插入位置),插入到顺序表中,输出插入后的顺序表内容。

(3)从键盘上输入一个整数(删除元素的位置),判断在顺序表中是否存在,若存在,删除之,并输出删除后的顺序表内容。

源程序:void main(){}运行结果:2、编写程序实现顺序表逆置算法。

提示:(1)在1.h添加成员函数void Reverse()及此成员函数的定义。

(2)在main函数调用并实现将顺序表s1逆置头文件中成员函数定义:void sq_LList<T>::Reverse(){}void main(){//添加内容}运行结果:(2)创建一个(名为你的学号+b)工程,将所给的三个文件1.h 1.cpp 1加入到工程中,编写程序完成下列功能:1、理解1.h文件中linked_List类的定义及类成员函数的实现,删除main函数中的所有内容,在main函数中编写程序实现:(1)从键盘上输入5个整数,创建单链表s1,并输出单链表中的内容。

(2)从键盘上输入一个整数(删除位置),删除指定位置的元素,输出删除后的单链表内容。

数据结构顺序表和单链表的基本操作

数据结构顺序表和单链表的基本操作

实验一顺序表和单链表的基本操作一、实验目的a)掌握线性顺序存储结构的形式与特点;b)熟练利用顺序存储结构实现线性表的基本操作;c)熟练掌握顺序存储结构中的算法实现;d)掌握线性表链式存储结构的特点;e)熟练利用链式存储结构实现线性表的基本操作;f)熟练掌握链式存储结构中的算法实现。

二、知识准备a)线性表顺序结构的表示;b)顺序表的基本操作:顺序表的建立、查找、插入、删除;c)线性表链式存储结构的表示;d)链式表的基本操作:链式表的建立、查找、插入、删除;链式存储结构表不能随机存取,只能设置一个指针变量,从表头逐步向后移动来实现插入或删除数据的位置,找到后再进行具体操作。

三、实验内容1、下面提供的程序实现的是:设有两个按元素值递增有序的顺序表la和lb,编写程序将la表和lb表归并成一个新的递增有序的顺序表lc(值相同的元素均保留在lc表中)。

*/# include "datastru.h"# include <stdio.h>void merge_sqlist(SEQUENLIST la,SEQUENLIST lb,SEQUENLIST *lc){/*两有序表合并*/int i , j , k ;i = j = k = 1 ;while( ____i<=st && j<=st___)//la没有到达链表尾部并且lb 也没有到达链表尾部if( la.datas[i] <= lb.datas[j])//如果la的数据小于lb的数据{ _____ lc->datas[k]=la.datas[i]____ ;//就把la的数据放到lc中;注意lc是地址变量 k++ ; i++ ;}else{ ____lc->datas[k]=lb.datas[j]____; //否则就把lb的数据放到lc中k++ ; j++ ;}while( _____i<=st____ ) //如果la没有到达尾部{ _____lc->datas[k]=la.datas[i] ____ ; //就把剩余的la数据放到lc后面k++ ; i++;}while( ____ j<=st ______ ) //如果lb没有到达尾部{ ___lc->datas[k]=lb.datas[j]__ ; //就把剩余的lb数据放到lc后面k++; j++;}lc->last =st+st;return;}main( ){ SEQUENLIST la, lb, lc;int i, k, m;printf("请输入la顺序表元素,元素为整型量,用空格分开,-99为结束标志: ");st = 0; i = 0; scanf("%d",&i);while (i != -99) {/*输入la顺序表元素,建立有序表*/k = st;while((k>=1) && ( i<la.datas[k])) k--;for(m = st; m >= k+1; m--) la.datas[m + 1] = la.datas[m];la.datas[k + 1] = i; st++;scanf("%d",&i);}printf("\n\n请输入lb顺序表元素,元素为整型量,用空格分开,-99为结束标志:");st = 0; i = 0; scanf("%d",&i);while (i != -99) {/*输入lb顺序表元素,建立有序表*/k = st;while((k>=1) && ( i<lb.datas[k])) k--;for(m = st; m >= k+1; m--) lb.datas[m + 1] = lb.datas[m];lb.datas[k + 1] = i; st++;scanf("%d",&i); }printf("\nla有序表元素列表:");for (i = 1; i <= st; i++)printf("% d",la.datas[i]);printf("\n");printf("\nlb有序表元素列表:");for (i = 1; i <= st; i++)printf("% d",lb.datas[i]);printf("\n");merge_sqlist (la, lb, &lc);printf("\n合并后lc有序表元素列表:");for (i = 1; i <= st; i++)printf(" %d",lc.datas[i]);printf("\n");}在做的过程中我所遇到的问题:发现头文件【# include "datastru.h"】无法被系统识别?在同学的帮助下得出答案:需要将目标程序“另存为”存储为【*.cpp】格式的文件。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中重要的基础课程,通过本次实验,旨在深入理解和掌握常见数据结构的基本概念、操作方法以及在实际问题中的应用。

具体目的包括:1、熟练掌握线性表(如顺序表、链表)的基本操作,如插入、删除、查找等。

2、理解栈和队列的特性,并能够实现其基本操作。

3、掌握树(二叉树、二叉搜索树)的遍历算法和基本操作。

4、学会使用图的数据结构,并实现图的遍历和相关算法。

二、实验环境本次实验使用的编程环境为具体编程环境名称,编程语言为具体编程语言名称。

三、实验内容及步骤(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。

实现顺序表的初始化、插入、删除和查找操作。

2、链表的实现定义链表的节点结构,包含数据域和指针域。

实现链表的创建、插入、删除和查找操作。

(二)栈和队列的实现1、栈的实现使用数组或链表实现栈的数据结构。

实现栈的入栈、出栈和栈顶元素获取操作。

2、队列的实现采用循环队列的方式实现队列的数据结构。

完成队列的入队、出队和队头队尾元素获取操作。

(三)树的实现与遍历1、二叉树的创建以递归或迭代的方式创建二叉树。

2、二叉树的遍历实现前序遍历、中序遍历和后序遍历算法。

3、二叉搜索树的操作实现二叉搜索树的插入、删除和查找操作。

(四)图的实现与遍历1、图的表示使用邻接矩阵或邻接表来表示图的数据结构。

2、图的遍历实现深度优先遍历和广度优先遍历算法。

四、实验结果与分析(一)线性表1、顺序表插入操作在表尾进行时效率较高,在表头或中间位置插入时需要移动大量元素,时间复杂度较高。

删除操作同理,在表尾删除效率高,在表头或中间删除需要移动元素。

2、链表插入和删除操作只需修改指针,时间复杂度较低,但查找操作需要遍历链表,效率相对较低。

(二)栈和队列1、栈栈的特点是先进后出,适用于函数调用、表达式求值等场景。

入栈和出栈操作的时间复杂度均为 O(1)。

2、队列队列的特点是先进先出,常用于排队、任务调度等场景。

实验一 顺序表和单链表的基本操作的实现

实验一   顺序表和单链表的基本操作的实现

实验一顺序表和单链表的基本操作的实现一、顺序表实验内容:1.编写函数,通过数组,建立一个顺序表。

2.编写函数,实现对该顺序表的遍历。

3.编写函数,在顺序表中进行顺序查找某一元素,查找成功则返回其存储位置i,否则返回错误信息。

4.编写函数,实现在顺序表的第i个位置上插入一个元素e的算法。

5.编写函数,实现删除顺序表中第i个元素的算法。

6.编写函数,实现输入一个元素data,把它插入到有序表中,使顺序表依然有序。

7.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。

实验目的及要求:1.掌握顺序表的存储结构形式及其描述2.掌握顺序表的建立、查找、插入和删除操作。

实验程序:#include <stdio.h>#include <stdlib.h>#define M 100 //最大限void creat_list(int a[], int n); //建立顺序表void datafind_list(int a[],int d); //按值查找元素void find_list(int a[],int i); //按位查找元素void in(int a[], int i,int e); //插入接点void delet(int a[], int i); //删除接点void print_list(int a[] ); //打印顺序表int main(){int a[M];int data;int num;int place; int ch;printf("输入数据个数:");scanf("%d",&num);creat_list(a, num);print_list(a);while(1){printf("请选择操作:\n");printf("***************************************************************\n") ;printf("1.按值查找 2.按位查找 3.插入接点 4.删除接点 \n");printf("***************************************************************\n") ;scanf("%d",&ch);switch(ch){case 1:printf("Pleae enter the data you want to find:\n"); //按值查找scanf("%d",&data);datafind_list(a,data);break;case 2:printf("Pleae enter where you want to find:\n"); //按位查找scanf("%d",&place);printf("The place is :%d\n",place);find_list(a, place);break;case 3:printf("Pleae enter where you want to insert:\n"); //插入接点scanf("%d",&place);printf("input a data what you want to insert");scanf("%d",&data);in(a,place,data);print_list(a); break;case 4:printf("Pleae enter where you want to delet:\n"); //删除接点scanf("%d",&place);printf("The place is :%d\n",place);printf("Pleae enter where you want to delet:\n");scanf("%d",&place);printf("The place is :%d\n",place);delet(a, place);print_list(a);break;default: printf("输入错误,请重新选择");break;}}return 0;}void creat_list(int a[], int n) //建立顺序表{ int i;int j;int x;printf("输入数据:");scanf("%d",&a[1]);for (i = 2; i <= n; i++){ scanf("%d",&x);for (j = 1; j <= i - 1; j++){ if (x == a[j]){break;} }if (j > i - 1){a[i] = x;}elsei--;}a[0] = n;}void datafind_list(int a[],int d) //按值查找元素{ int i;int j=0;for(i=1;i<=a[0];i++){if(d==a[i])printf("the data is %d and its place is %d\n",d,i);else j++;}if (j==a[0]){printf("error\n");}}void find_list(int a[],int i) //按位查找{if (i < 1 || i > a[0] + 1){printf("error");}else printf("%5d",a[i]);}void in(int a[], int i,int e) //插入表中某个元素{ int j;if (i < 1 || i > a[0] + 1){printf("error");}else{ a[0] = a[0] + 1;for (j = a[0]; j >i; j--) //后移插入位置后的数{a[j] = a[j-1];}a[i]=e;}}void delet(int a[], int i) //删除表中某个元素{ int j;if (i < 1 || i > a[0] + 1){printf("error");exit(0);}for (j = i + 1; j <= a[0]; j++) //前移被删数的位置 {a[j - 1] = a[j];}a[0] = a[0] - 1;}void print_list(int a[] ) //打印顺序表{ int i;printf("\n");printf("顺序表是:");for (i = 1; i <= a[0]; i++){printf("%5d",a[i]);}printf("\n");}实验结果:实验分析:实验成功实现顺序表的基本操作!成功完成本实验,需要掌握顺序表的结构和理解顺序表结构的实验原理。

链表实验报告总结doc

链表实验报告总结doc

链表实验报告总结篇一:顺序表,链表总结实验报告实验报告实验目的:学生管理系统(顺序表)实验要求:1.建表2.求表长3.插入4.查找5.删除6.列表7.退出源程序:#include#include#include#define MaxSize 1000typedef struct{char xh[40];char xm[40];int cj;}DataType; //学生的结构typedef struct {DataType data[MaxSize]; //定义表的数据类型int length; //数据元素分别放置在data[0]到data[length-1]当中} SqList; //表的结构void liebiao(SqList *L)//{int k,n;char q;printf("请输入,输入学生的个数:\n");fflush(stdin);scanf("%d",&n);for(k=0;k {printf("请输入学生学号\n");scanf("%s",L->data[k].xh);printf("请输入学生名字\n");scanf("%s",L->data[k].xm);printf("请输入学生成绩\n");scanf("%d",&L->data[k].cj); 建立表格}L->length=n;}void qb(SqList *L) //全部输出{int k,w;for(k=0;klength;k++){w=k+1;printf("第%d位学生:",w);printf("%s %s%d\n",L->data[k].xh,L->data[k].xm,L->d ata[k].cj);}}int cr(SqList *L,DataType *xs,int i) //插入信息{int j;if(L->length==MaxSize){printf("没有!");return 0;}else if((iL->length)){printf("程序溢出,不符合");return 0;}else{for(j=L->length-1;j>=i;j--){strcpy(L->data[j+1].xh,L->data[j].xh); strcpy(L->data[j+1].xm,L->data[j].xm);L->data[j+1].cj=L->data[j].cj;}strcpy(L->data[i].xh,xs->xh);strcpy(L->data[i].xm,xs->xm);L->data[i].cj=xs->cj;L->length=L->length+1;}return 0;}int cz(SqList *L) //查找信息{char xh[40];char xm[40];int cj;int i=0,u;printf(" 1、按学号查询\n"); printf(" 1、按姓名查询\n"); printf(" 1、按成绩查询\n"); printf("请选择:");fflush(stdin);scanf("%d",&u);if (u==1){printf("请输入要查找学生的学号:");scanf("%s",xh);for(i=0;ilength;i++){篇二:单链表的实验报告辽宁工程技术大学上机实验报告篇三:单链表实验报告实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现班级:T523-1 姓名:王娟学号:33完成日期:XX.04.04 地点:5502学时:2学时一、需求分析【实验目的】通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的链接存储及相应的基本操作;并熟练掌握VC++ 6.0操作平台,学会调试程序,以及编写电子实验报告【实验要求】编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除,查找,求表长等基本功能,在此基础上能够加入DOS下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告

数据结构顺序表链表试验报告数据结构试验报告一、引言数据结构是计算机科学中非常重要的一个概念,它用于组织和存储数据,以便能够高效地进行检索和操作。

顺序表和链表是两种常见的数据结构,它们在实际应用中都有各自的优势和局限性。

本报告将对顺序表和链表进行试验比较,以评估它们在不同场景下的性能和适合性。

二、实验目的本次试验的目的是比较顺序表和链表在插入、删除和查找操作上的性能差异,并分析其时间复杂度和空间复杂度。

通过实验结果,可以对不同场景下选择合适的数据结构提供参考。

三、实验内容1. 顺序表实验a. 创建一个包含100个元素的顺序表;b. 在表尾插入一个元素;c. 在表头插入一个元素;d. 在表的中间位置插入一个元素;e. 删除表尾的一个元素;f. 删除表头的一个元素;g. 删除表的中间位置的一个元素;h. 查找一个元素;i. 遍历整个顺序表。

2. 链表实验a. 创建一个包含100个节点的链表;b. 在链表尾部插入一个节点;c. 在链表头部插入一个节点;d. 在链表的中间位置插入一个节点;e. 删除链表尾部的一个节点;f. 删除链表头部的一个节点;g. 删除链表的中间位置的一个节点;h. 查找一个节点;i. 遍历整个链表。

四、实验结果与分析1. 顺序表实验结果a. 在表尾插入一个元素的平均时间为0.1ms;b. 在表头插入一个元素的平均时间为0.2ms;c. 在表的中间位置插入一个元素的平均时间为0.5ms;d. 删除表尾的一个元素的平均时间为0.1ms;e. 删除表头的一个元素的平均时间为0.2ms;f. 删除表的中间位置的一个元素的平均时间为0.5ms;g. 查找一个元素的平均时间为1ms;h. 遍历整个顺序表的平均时间为10ms。

2. 链表实验结果a. 在链表尾部插入一个节点的平均时间为0.2ms;b. 在链表头部插入一个节点的平均时间为0.1ms;c. 在链表的中间位置插入一个节点的平均时间为0.5ms;d. 删除链表尾部的一个节点的平均时间为0.2ms;e. 删除链表头部的一个节点的平均时间为0.1ms;f. 删除链表的中间位置的一个节点的平均时间为0.5ms;g. 查找一个节点的平均时间为2ms;h. 遍历整个链表的平均时间为5ms。

链表顺序表实验报告 数据结构与算法分析

链表顺序表实验报告  数据结构与算法分析

数据结构与算法分析课程设计报告课题名称: 使用一个链表和顺序表构建城市数据库提交文档组号: 2 编程学生姓名及学号:测试学生姓名及学号:报告学生姓名及学号:指导教师姓名:指导教师评阅成绩:指导教师评阅意见:..提交报告时间: 2013 年 11 月日实验一:Implement a city database using unordered lists and link lists1.实验的目的和要求:<1>采用C++的ASCII码文件和模块函数实现;<2>熟练掌握数组列表和链表列表的实现;<3>熟练掌握计算机系统的基本操作方法,了解如何编译、运行一个C++程序;<4>上机调试程序,掌握查错、排错使程序能正确运行。

2. 实验的环境:1、硬件环境:索尼笔记本电脑,Intel(R) Core(TM) i7-3632M ,8GB内存可;2、软件环境:Windows 8 下的Microsoft Visual Studio 20082.算法描述:数据结构与算法分析的背景:数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机学科的核心课称,而且已成为其他理工专业的热门选修课。

数据结构是一门专业选技术基础科。

一方面,它要求我们学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术;另一方面,数据结构的学习过程也是复杂程序设计的训练过程,要求我们编写的程序结构清楚和正确易读,复合软件工程的规范,并培养我们的数据抽象能力。

本次课程设计就是对数据结构中的顺序表和链表的操作的应用。

顺序表:1.顺序表的定义(1) 顺序存储方法即把线性表的结点按逻辑次序依次存放在一组地址连续的存储单元里的方法。

(2) 顺序表(Sequential List)用顺序存储方法存储的线性表简称为顺序表(Sequential List)。

顺序表链表KMP实验报告

顺序表链表KMP实验报告

附件(四)深圳大学实验报告课程名称:数据结构实验与课程设计实验项目名称:顺序表、链表、堆栈队列、串KMP算法学院:专业:指导教师:报告人:学号:班级:实验时间:实验报告提交时间:教务处制第1行输出创建后的顺序表内容,包括顺序表实际长度和数据(完成)每成功执行一次操作(插入或删除),输出执行后的顺序表内容(完成)每成功执行一次查找,输出查找到的数据(完成)如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容(完成)2.Problem B: DS顺序表--连续操作目的:(1)建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)(2)实现连续多个插入,即从位置i开始插入多个数据(3)实现连续多个删除,即从位置i开始删除多个数据要求:Input第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据(完成)第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k 个数据(完成)第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据(完成)Output顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开(完成)第1行输出创建后的顺序表内容(完成)第2行输出执行连续插入后的顺序表内容(完成)第3行输出执行连续删除后的顺序表内容(完成)(2)属性包括:data数据域、next指针域(3)操作包括:插入、删除、查找(4)注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据要求:Input第1行先输入n表示有n个数据,接着输入n个数据(完成)第2行输入要插入的位置和新数据(完成)第3行输入要插入的位置和新数据(完成)第4行输入要删除的位置(完成)第5行输入要删除的位置(完成)第6行输入要查找的位置(完成)第7行输入要查找的位置(完成)Output数据之间用空格隔开,(完成)第1行输出创建后的单链表的数据(完成)每成功执行一次操作(插入或删除),输出执行后的单链表数据(完成)每成功执行一次查找,输出查找到的数据(完成)如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出单链表(完成)2.Problem B: DS单链表--结点交换目的:(1)用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。

数据结构c++顺序表、单链表的基本操作,查找、排序代码

数据结构c++顺序表、单链表的基本操作,查找、排序代码

} return 0; }
实验三 查找
实验名称: 实验3 查找 实验目的:掌握顺序表和有序表的查找方法及算法实现;掌握二叉排序 树和哈希表的构造和查找方法。通过上机操作,理解如何科学地组织信 息存储,并选择高效的查找算法。 实验内容:(2选1)内容1: 基本查找算法;内容2: 哈希表设计。 实验要求:1)在C++系统中编程实现;2)选择合适的数据结构实现查 找算法;3)写出算法设计的基本原理或画出流程图;4)算法实现代码 简洁明了;关键语句要有注释;5)给出调试和测试结果;6)完成实验 报告。 实验步骤: (1)算法设计 a.构造哈希函数的方法很多,常用的有(1)直接定址法(2)数字分析法;(3) 平方取中法;(4)折叠法;( 5)除留余数法;(6)随机数法;本实验采用的是除 留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈 希地址 (2)算法实现 hash hashlist[n]; void listname(){ char *f; int s0,r,i; NameList[0].py="baojie"; NameList[1].py="chengቤተ መጻሕፍቲ ባይዱoyang"; ……………………………… NameList[29].py="wurenke"; for(i=0;i<q;i++){s0=0;f=NameList[i].py; for(r=0;*(f+r)!='\0';r++) s0+=*(f+r);NameList[i].k=s0; }} void creathash(){int i;
v[k-1]=v[k]; nn=nn-1; return ; } int main() {sq_LList<double>s1(100); cout<<"第一次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); s1.ins_sq_LList(0,1.5); s1.ins_sq_LList(1,2.5); s1.ins_sq_LList(4,3.5); cout<<"第二次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); s1.del_sq_LList(0); s1.del_sq_LList(2); cout<<"第三次输出顺序表对象s1:"<<endl; s1.prt_sq_LList(); return 0; } 运行及结果:

数据结构实验报告-实验一顺序表、单链表基本操作的实现

数据结构实验报告-实验一顺序表、单链表基本操作的实现

数据结构实验报告-实验⼀顺序表、单链表基本操作的实现实验⼀顺序表、单链表基本操作的实现l 实验⽬的1、顺序表(1)掌握线性表的基本运算。

(2)掌握顺序存储的概念,学会对顺序存储数据结构进⾏操作。

(3)加深对顺序存储数据结构的理解,逐步培养解决实际问题的编程能⼒。

l 实验内容1、顺序表1、编写线性表基本操作函数:(1)InitList(LIST *L,int ms)初始化线性表;(2)InsertList(LIST *L,int item,int rc)向线性表的指定位置插⼊元素;(3)DeleteList1(LIST *L,int item)删除指定元素值的线性表记录;(4)DeleteList2(LIST *L,int rc)删除指定位置的线性表记录;(5)FindList(LIST *L,int item)查找线性表的元素;(6)OutputList(LIST *L)输出线性表元素;2、调⽤上述函数实现下列操作:(1)初始化线性表;(2)调⽤插⼊函数建⽴⼀个线性表;(3)在线性表中寻找指定的元素;(4)在线性表中删除指定值的元素;(5)在线性表中删除指定位置的元素;(6)遍历并输出线性表;l 实验结果1、顺序表(1)流程图(2)程序运⾏主要结果截图(3)程序源代码#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct LinearList/*定义线性表结构*/{int *list; /*存线性表元素*/int size; /*存线性表长度*/int Maxsize; /*存list数组元素的个数*/};typedef struct LinearList LIST;void InitList(LIST *L,int ms)/*初始化线性表*/{if((L->list=(int*)malloc(ms*sizeof(int)))==NULL){printf("内存申请错误");exit(1);}L->size=0;L->Maxsize=ms;}int InsertList(LIST *L,int item,int rc)/*item记录值;rc插⼊位置*/ {int i;if(L->size==L->Maxsize)/*线性表已满*/return -1;if(rc<0)rc=0;if(rc>L->size)rc=L->size;for(i=L->size-1;i>=rc;i--)/*将线性表元素后移*/L->list[i+=1]=L->list[i];L->list[rc]=item;L->size++;return0;}void OutputList(LIST *L)/*输出线性表元素*/{int i;printf("%d",L->list[i]);printf("\n");}int FindList(LIST *L,int item)/*查找线性元素,返回值>=0为元素的位置,返回-1为没找到*/ {int i;for(i=0;i<L->size;i++)if(item==L->list[i])return i;return -1;}int DeleteList1(LIST *L,int item)/*删除指定元素值得线性表记录,返回值为>=0为删除成功*/ {int i,n;for(i=0;i<L->size;i++)if(item==L->list[i])break;if(i<L->size){for(n=i;n<L->size-1;n++)L->list[n]=L->list[n+1];L->size--;return i;}return -1;}int DeleteList2(LIST *L,int rc)/*删除指定位置的线性表记录*/{int i,n;if(rc<0||rc>=L->size)return -1;for(n=rc;n<L->size-1;n++)L->list[n]=L->list[n+1];L->size--;return0;}int main(){LIST LL;int i,r;printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.size,LL.Maxsize);printf("list addr=%p\tsize=%d\tMaxsize=%d\n",LL.list,LL.list,LL.Maxsize);while(1){printf("请输⼊元素值,输⼊0结束插⼊操作:");fflush(stdin);/*清空标准输⼊缓冲区*/scanf("%d",&i);if(i==0)break;printf("请输⼊插⼊位置:");scanf("%d",&r);InsertList(&LL,i,r-1);printf("线性表为:");OutputList(&LL);}while(1){printf("请输⼊查找元素值,输⼊0结束查找操作:");fflush(stdin);/*清空标准输⼊缓冲区*/scanf("%d ",&i);if(i==0)break;r=FindList(&LL,i);if(r<0)printf("没有找到\n");elseprintf("有符合条件的元素,位置为:%d\n",r+1);}while(1){printf("请输⼊删除元素值,输⼊0结束查找操作:");fflush(stdin);/*清楚标准缓存区*/scanf("%d",&i);if(i==0)break;r=DeleteList1(&LL,i);if(i<0)printf("没有找到\n");else{printf("有符合条件的元素,位置为:%d\n线性表为:",r+1);OutputList(&LL);}while(1){printf("请输⼊删除元素位置,输⼊0结束查找操作:");fflush(stdin);/*清楚标准输⼊缓冲区*/scanf("%d",&r);if(r==0)break;i=DeleteList2(&LL,r-1);if(i<0)printf("位置越界\n");else{printf("线性表为:");OutputList(&LL);}}}链表基本操作l 实验⽬的2、链表(1)掌握链表的概念,学会对链表进⾏操作。

数据结构实验报告实验1

数据结构实验报告实验1

数据结构实验报告实验1一、实验目的本次实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见的数据结构,如线性表、栈、队列等,并能够运用所学知识解决实际问题。

二、实验环境本次实验使用的编程环境为Visual Studio 2019,编程语言为C++。

三、实验内容与步骤(一)线性表的实现与操作1、顺序表的实现定义一个固定大小的数组来存储线性表的元素。

实现插入、删除、查找等基本操作。

2、链表的实现定义链表节点结构体,包含数据域和指针域。

实现链表的创建、插入、删除、遍历等操作。

(二)栈的实现与应用1、栈的实现使用数组或链表实现栈的数据结构。

实现入栈、出栈、栈顶元素获取等操作。

2、栈的应用利用栈实现表达式求值。

(三)队列的实现与应用1、队列的实现使用循环数组或链表实现队列。

实现入队、出队、队头元素获取等操作。

2、队列的应用模拟银行排队系统。

四、实验结果与分析(一)线性表1、顺序表插入操作:在指定位置插入元素时,需要移动后续元素,时间复杂度为 O(n)。

删除操作:删除指定位置的元素时,同样需要移动后续元素,时间复杂度为 O(n)。

查找操作:可以直接通过索引访问元素,时间复杂度为 O(1)。

2、链表插入操作:只需修改指针,时间复杂度为 O(1)。

删除操作:同样只需修改指针,时间复杂度为 O(1)。

查找操作:需要遍历链表,时间复杂度为 O(n)。

(二)栈1、表达式求值能够正确计算简单的四则运算表达式,如 2 + 3 4。

对于复杂表达式,如(2 + 3) 4,也能得到正确结果。

(三)队列1、银行排队系统模拟了客户的到达、排队和服务过程,能够反映出队列的先进先出特性。

五、实验中遇到的问题及解决方法(一)线性表1、顺序表的空间浪费问题问题描述:当预先分配的空间过大而实际使用较少时,会造成空间浪费。

解决方法:可以采用动态分配空间的方式,根据实际插入的元素数量来调整存储空间。

2、链表的指针操作错误问题描述:在链表的插入和删除操作中,容易出现指针指向错误,导致程序崩溃。

数据结构实验1顺序表_链表

数据结构实验1顺序表_链表

淮海工学院计算机科学系实验报告书课程名:《数据结构》题目:线性表数据结构试验班级:软件112学号:姓名:线性表实验报告要求1目的与要求:1)掌握线性表数据结构的基本概念和抽象数据类型描述;2)熟练掌握线性表数据结构的顺序和链式存储存表示;3)熟练掌握线性表顺序存储结构的基本操作算法实现;4)熟练掌握线性表的链式存储结构的基本操作算法实现;5)掌握线性表在实际问题中的应用和基本编程技巧;6)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);7)按照报告格式和内容要求,认真书写实验报告,并在试验后的第三天提交电子(全班同学提交到学委,再统一打包提交给老师)和纸质(每班每次5份,学委安排,保证每个同学至少提交一次);8)积极开展实验组组内交流和辅导,严禁复制和剽窃他人实验成果,一旦发现严肃处理;9)上实验课前,要求每个同学基本写好程序,并存储在自己的U盘上,用于实验课堂操作时调试和运行。

凡不做准备,没有提前编写程序者,拒绝上机试验。

2实验内容或题目一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法:1)创建任意整数线性表(即线性表的元素值随机在键盘上输入)的顺序存储结构(即顺序表),长度限定在25之内;2)打印/显示(遍历)该线性表(依次打印/显示出表中元素值);3)在顺序表中查找第i个元素,并返回其值;4)在顺序表第i个元素之前插入一已知元素;5)在顺序表中删除第i个元素;6)求顺序表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。

按照动态单链表结构实现如下算法:1)按照头插法或尾插法创建一个带头结点的字符型单链表(链表的字符元素从键盘输入),长度限定在10之内;2)打印(遍历)该链表(依次打印出表中元素值,注意字符的输入顺序与链表的结点顺序);3)在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;4)在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;5)在链表中第i个结点之前插入一个新结点;6)在线性表中删除第i个结点;7)计算链表的长度。

线性表-1.顺序表和链表

线性表-1.顺序表和链表

线性表-1.顺序表和链表把所有数据⽤⼀根线⼉串起来,再存储到物理空间中,⼀对⼀关系线性表分为以下两种顺序存储结构(顺序表) 链式存储结构(链表)术语表⽰:某⼀元素的左侧相邻元素称为“直接前驱”,位于此元素左侧的所有元素都统称为“前驱元素”;某⼀元素的右侧相邻元素称为“直接后继”,位于此元素右侧的所有元素都统称为“后继元素”;1.顺序表俗称数组使⽤顺序表存储数据之前,除了要申请⾜够⼤⼩的物理空间之外,为了⽅便后期使⽤表中的数据,顺序表还需要实时记录以下 2 项数据:顺序表申请的存储容量;顺序表的长度,也就是表中存储数据元素的个数;插⼊:将要插⼊位置元素以及后续的元素整体向后移动⼀个位置;将元素放到腾出来的位置上;删除:后续元素整体前移⼀个位置,会直接将⽬标元素删除,可间接实现删除元素的⽬的。

查找后⾯章节介绍(查找算法)修改找到⽬标元素直接修改该元素的值2.链表与顺序表不同,链表不限制数据的物理存储状态,换句话说,使⽤链表存储的数据元素,其物理存储位置是随机的。

链表中每个数据的存储都由以下两部分组成:数据元素本⾝,其所在的区域称为数据域;指向直接后继元素的指针,所在的区域称为指针域;所⽰的结构在链表中称为节点头指针:⼀个普通的指针,它的特点是永远指向链表第⼀个节点的位置。

很明显,头指针⽤于指明链表的位置,便于后期找到链表并使⽤表中的数据;节点:链表中的节点⼜细分为头节点、⾸元节点和其他节点:头节点:其实就是⼀个不存任何数据的空节点,通常作为链表的第⼀个节点。

对于链表来说,头节点不是必须的,它的作⽤只是为了⽅便解决某些实际问题;⾸元节点:由于头节点(也就是空节点)的缘故,链表中称第⼀个存有数据的节点为⾸元节点。

⾸元节点只是对链表中第⼀个存有数据节点的⼀个称谓,没有实际意义;其他节点:链表中其他的节点;链表实现##链表依次添加1、2、3、4;typedef struct Link{int elem;struct Link *next;}link;link *init();link *init(){/*1.头指针以及next指向下个节点的指针不确定下个节点的情况下都设置为NULL。

线性表与链表实验报告

线性表与链表实验报告

数据结构实验报告实验0:顺序表与链表专业:班级:姓名:学号:指导教师:日期:一、实验目的(1)掌握顺序表的存储结构形式及其描述和基本运算的实。

(2)熟练掌握动态链表结构及有关算法的设计。

(3)掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。

(4)理解单循环链表及双循环链表的特点。

二、实验内容(1)顺序表的应用(2)链表的应用三、需求分析1.输入的形式和输入值的范围2.建立链表时输入的都是整数,输入0代表输入的结束,插入元素时需要输入插入的位置和元素的值,删除元素时输入删除元素的值。

3.输出形式4.所有操作在出现错误时都会有提示,并且在任意一个操作结束后都会输出操作后的链表。

5.程序所能达到的功能6.完成链表的生成,任意位置插入元素、删除,实现链表数据的排序,删除链表中相同的元素,并且比较两个链表是否相等以及将两链表合成一个有序的链表。

7. 4.测试数据:见第八部分。

四、概要设计实验一:(1) 本程序包含的函数如下:其中main函数负责操作其他的函数。

(2)各函数的功能设计为:Creat(student & L):建立一个链表L(尾部插入建立的链表),并且返回这个链表的头指针。

find(student L,int e):在链表L中寻找一样元素e。

print(student L):依次输出链表 L 的内容。

insert(student & L):插入元素。

spilt(student & L):从后向前寻找奇数在偶数前的情况,如果一个奇数或偶数之后还是一个奇数和偶数,就让代表奇数和偶数的变量自增,在每次所有符合连续情况的奇偶数交换完成后,偶数要从新计数。

symmetry(student L):判断是否是对称的链表。

unite(student L1, student L2, Student & L3):将链表A和B合成一个非递减的链表,返回新链表的头指针.五、详细设计(1)结点类型和指针类型:typedef struct{int *elem;//数组指针elem指示线性表的基地址。

数据结构(一)顺序表与链表

数据结构(一)顺序表与链表

数据结构(⼀)顺序表与链表线性表线性表的定义定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度线性表的特点除第⼀个元素外,其他每⼀个元素有⼀个且仅有⼀个直接前驱。

除最后⼀个元素外其他每⼀个元素有⼀个且仅有⼀个直接后继。

顺序表的定义和特点定义:将线性表中的元素相继存放在⼀个连续的存储空间中。

可利⽤⼀维数组描述存储结构。

特点:线性表的顺序存储⽅式。

遍历:顺序访问, 可以随机存取。

链表特点每个元素(表项)由结点(Node)构成。

线性结构结点可以连续,可以不连续存储结点的逻辑顺序与物理顺序可以不⼀致表可扩充typedef char ListData;typedef struct node { //链表结点ListData data; //结点数据域struct node * link; //结点链域} ListNode;typedef ListNode * LinkList;LinkList first; //链表头指针链表的插⼊与删除插⼊int Insert ( LinkList& first, int x, int i ){ListNode * p = first; int k = 0; //在链表第 i 个结点处插⼊新元素 xwhile ( p != NULL && k < i -1 ){ p = p->link; k++; } //找第 i-1个结点if ( p == NULL && first != NULL ){printf ( “⽆效的插⼊位置!\n” );return0;}ListNode * newnode = (ListNode *) malloc ( sizeof (ListNode) ); //创建新结点newnode->data = x;if ( first == NULL || i == 1 ){ //插在表前newnode->link = first;first = newnode;}else { //插在表中或末尾newnode->link = p->link;p->link = newnode;}return1;}删除int Delete ( LinkList& first, int i ){ListNode *p, *q; //在链表中删除第 i 个结点if ( i == 1 ) //删除表中第 1 个结点{q = first; first = first->link;} else {p = first; int k = 0; //找第 i-1个结点while ( p != NULL && k < i-1 ){p = p->link; k++;}if ( p == NULL || p->link == NULL ){printf ( “⽆效的删除位置!\n” );return0;}else{ //删除表中或表尾元素 q = p->link; //重新链接p->link = q->link;}}free ( q ); //删除qreturn1;}循环链表typedef char ListData;typedef struct cnode { //链表结点ListData data; //结点数据域struct cnode * link; //结点链域} CircListNode;typedef CircListNode * CircLinkList; //循环链表头指针CircLinkList first; //循环链表头指针双向循环链表typedef int ListData;typedef struct dnode{ListNode data; //数据struct dnode * prior, * next; //指针} DblNode;typedef DblNode * DblList; //双向链表void CreateDblList ( DblList *first ){first = ( DblNode * ) malloc ( sizeof ( DblNode ) );if ( first == NULL ){print ( “存储分配错!\n” );exit (1);}first->prior = first->next = first; //表头结点的链指针指向⾃⼰}。

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

实验一顺序表与链表一、实验目的1、掌握线性表中元素的前驱、后续的概念。

2、掌握顺序表与链表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

4、理解顺序表、链表数据结构的特点(优缺点)。

二、实验预习说明以下概念1、线性表:2、顺序表:3、链表:三、实验容和要求1、阅读下面程序,在横线处填写函数的基本功能。

并运行程序,写出结果。

#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1#define INIT_SIZE 5 /*初始分配的顺序表长度*/#define INCREM 5 /*溢出时,顺序表长度的增量*/typedef int ElemType; /*定义表元素的类型*/typedef struct Sqlist{ElemType *slist; /*存储空间的基地址*/int length; /*顺序表的当前长度*/int listsize; /*当前分配的存储空间*/}Sqlist;int InitList_sq(Sqlist *L); /* 构造一个空的线性表L*/int CreateList_sq(Sqlist *L,int n); /* 构造顺序表的长度为n */int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 在L中第i个位置之前插入新的数据元素e,L的长度加1 */int PrintList_sq(Sqlist *L); /*输出顺序表的元素*/int ListDelete_sq(Sqlist *L,int i); /*删除第i个元素*/int ListLocate(Sqlist *L,ElemType e); /*查找值为e的元素*/int InitList_sq(Sqlist *L){L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));if(!L->slist) return ERROR;L->length=0;L->listsize=INIT_SIZE;return OK;}/*InitList*/int CreateList_sq(Sqlist *L,int n){ElemType e;int i;for(i=0;i<n;i++){printf("input data %d",i+1);scanf("%d",&e);if(!ListInsert_sq(L,i+1,e))return ERROR;}return OK;}/*CreateList*//*输出顺序表中的元素*/int PrintList_sq(Sqlist *L){int i;for(i=1;i<=L->length;i++)printf("%5d",L->slist[i-1]);return OK;}/*PrintList*/int ListInsert_sq(Sqlist *L,int i,ElemType e){int k;if(i<1||i>L->length+1)return ERROR;if(L->length>=L->listsize){L->slist=(ElemType*)realloc(L->slist,(INIT_SIZE+INCREM)*sizeof(ElemType));if(!L->slist)return ERROR;L->listsize+=INCREM;}for(k=L->length-1;k>=i-1;k--){L->slist[k+1]= L->slist[k];}L->slist[i-1]=e;L->length++;return OK;}/*ListInsert*//*在顺序表中删除第i个元素*/int ListDelete_sq(Sqlist *L,int i){}/*在顺序表中查找指定值元素,返回其序号*/int ListLocate(Sqlist *L,ElemType e){}int main(){Sqlist sl;int n,m,k;printf("please input n:"); /*输入顺序表的元素个数*/scanf("%d",&n);if(n>0){printf("\n1-Create Sqlist:\n");InitList_sq(&sl);CreateList_sq(&sl,n);printf("\n2-Print Sqlist:\n");PrintList_sq(&sl);printf("\nplease input insert location and data:(location,data)\n");scanf("%d,%d",&m,&k);ListInsert_sq(&sl,m,k);printf("\n3-Print Sqlist:\n");PrintList_sq(&sl);printf("\n");}elseprintf("ERROR");return 0;}运行结果●算法分析调用ListInsert_sq()函数,进行插入操作,并输出插入新元素后的状态,时间复杂度,空间复杂度较少,2、为第1题补充删除和查找功能函数,并在主函数中补充代码验证算法的正确性。

删除算法代码:int ListDelete_sq(Sqlist *L,int i){int p;if(i<1||i>L->length)return ERROR;for(p=i-1;p<L->length-1;p++){L->slist[p]=L->slist[p+1];}L->length --;return OK;}●运行结果算法分析主函数调用ListDelete_sq实现删除操作,在输出删除之后的线性表,时间复杂度低查找算法代码:int ListLocate(Sqlist *L,ElemType e){int i=0;while((i<=L->length) && (L->slist [i]!=e)){i++;}if(i<=L->length )return (i+1);elsereturn -1;}●运行结果●算法分析主函数通过调用ListLocate实现查找功能,然后输出查找元素的序号,时间复杂度低3、阅读下面程序,在横线处填写函数的基本功能。

并运行程序,写出结果。

#include<stdio.h>#include<malloc.h>#define ERROR 0#define OK 1typedef int ElemType; /*定义表元素的类型*/typedef struct LNode{ /*线性表的单链表存储*/ElemType data;struct LNode *next;}LNode,*LinkList;LinkList CreateList(int n); /* 构造顺序表的长度为nvoid PrintList(LinkList L); /*输出带头结点单链表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /* 在顺序表L中,将第i个元素存在时,替换成e*/LinkList CreateList(int n){LNode *p,*q,*head;int i;head=(LinkList)malloc(sizeof(LNode)); head->next=NULL;p=head;for(i=0;i<n;i++){q=(LinkList)malloc(sizeof(LNode)); printf("input data %i:",i+1);scanf("%d",&q->data); /*输入元素值*/q->next=NULL; /*结点指针域置空*/p->next=q; /*新结点连在表末尾*/p=q;}return head;}/*CreateList*/void PrintList(LinkList L){LNode *p;p=L->next; /*p指向单链表的第1个元素*/while(p!=NULL){printf("%5d",p->data);p=p->next;}}/*PrintList*/int GetElem(LinkList L,int i,ElemType *e){LNode *p;int j=1;p=L->next;while(p&&j<i){p=p->next;j++;}if(!p||j>i)return ERROR;*e=p->data;return OK;}/*GetElem*/int main(){int n,i;ElemType e;LinkList L=NULL; /*定义指向单链表的指针*/printf("please input n:"); /*输入单链表的元素个数*/scanf("%d",&n);if(n>0){printf("\n1-Create LinkList:\n");L=CreateList(n);printf("\n2-Print LinkList:\n");PrintList(L);printf("\n3-GetElem from LinkList:\n");printf("input i=");scanf("%d",&i);if(GetElem(L,i,&e))printf("No%i is %d",i,e);elseprintf("not exists");}elseprintf("ERROR");return 0;}●运行结果●算法分析主函数调用GetElem函数实现输出序号所对应的元素,时间复杂度低4、为第3题补充插入功能函数和删除功能函数。

相关文档
最新文档