《数据结构》上机实验一资料
数据结构上机报告

课程实验报告课程名称:数据结构专业班级:学号:姓名:指导教师:报告日期:计算机科学与技术学院目录1 课程实验概述 (1)2 实验一基于顺序结构的线性表实现2.1 问题描述 (2)2.2 系统设计 (2)2.3 系统实现 (3)2.4 效率分析 (12)3 实验二基于链式结构的线性表实现3.1 问题描述 (14)3.2 系统设计 (14)3.3 系统实现 (15)3.4 效率分析 (26)4 实验三基于二叉链表的二叉树实现4.1 问题描述 (27)4.2 系统设计 (27)4.3 系统实现 (29)4.4 效率分析 (45)5 实验总结与评价 (47)附录附录1 顺序线性表 (48)附录2 链式线性表 (61)附录3 二叉树 (75)1 课程实验概述线性表是最常用且最简单的一种数据结构。
简言之,一个线性表是n个数据元素的有限序列。
至于每个数据元素的具体含义,在不同的情况下各不相同。
线性表的长度可根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可进行插入和删除等操作。
树型结构是一类重要的非线性数据结构。
其中以树和二叉树最为重要,直观看来,树是以分支关系定义的层次结构。
本实验将通过C语言来实现线性表顺序储存结构、线性表链式储存结构以及二叉树链表的基本的、常见的运算。
2 实验一基于顺序结构的线性表实现2.1 问题描述基于顺序储存结构,实现线性表的构造、销毁、置空、插入、删除等运算。
2.2 系统设计(1)IntiaList(SqList * L)操作结果:构造一个空的线性表L(2)DestroyList(SqList * L)初始条件:线性表L己存在操作结果:销毁线性表L(3)ClearList(SqList *L)初始条件:线性表L己存在操作结果:将L重置为空表(4)ListEmpty(SqList L)初始条件:线性表已存在操作结果:若L为空表,则返回TRUE,否则返回FALSE(5)ListLength(SqList L)初始条件:线性表L已经存在操作结果:返回L中数据元素个数(6)GetElem(SqList L,int i,Elemtype * e)初始条件:线性表L己经存在,1<=i<=Listlength(L)操作结果:用e返回L中第(i-1)个元素的值(7)LocatElem(SqList L,Elemtype e,status (* compare)(Elemtype ,Elemtype ))初始条件:线性表L已存在,compare()是元素判定函数操作结果:返回L中第1个与e满足关系的数据元素的次序。
数据结构上机指导书_实验一

数据结构与算法实验指导书中国石油大学(北京)计算机科学与技术系前言《数据结构》是计算机及相关专业的一门核心基础课程,也是很多高校考研专业课之一。
它主要介绍线性结构、树结构、图结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。
这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。
学习这门课程,习题和实验是两个关键环节。
学生理解算法,上机实验是最佳的途径之一。
因此,实验环节的好坏是学生能否学好《数据结构》的关键。
为了更好地配合学生实验,特编写实验指导书。
一、实验目的更好的理解算法的思想、培养编程能力。
二、实验要求1、每次实验前学生必须根据试验内容认真准备实验程序及调试时所需的输入数据。
2、在指导教师的帮助下能够完成实验内容,得出正确的实验结果。
3、实验结束后总结实验内容、书写实验报告。
4、遵守实验室规章制度、不缺席、按时上、下机。
5、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣10分。
6、实验报告有一次不合格,扣5分,两次以上不合格者,平时成绩以零分记。
三、实验环境 VC++6.0或者VC2010四、说明1、本实验的所有算法中元素类型可以根据实际需要选择。
2、实验题目中带*者为较高要求,学生可自选;其余部分为基本内容,应尽量完成(至少完成70%,否则实验不合格)。
3、数据结构是很多高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。
五、实验报告的书写要求1.明确实验的目的及要求;2.记录实验的输入数据和输出结果;3.说明实验中出现的问题和解决过程;4.写出实验的体会和实验过程中没能解决的问题;六、参考书目《数据结构》(C++语言描述)王红梅等清华大学出版社《DATA STRUCTURE WITH C++》 William Ford,William Topp清华大学出版社(影印版)实验平台控制台程序1、启动Microsoft VC6.0集成开发环境如图所示:2、单击“文件”菜单,选择“新建”项。
数据结构《数据结构》上机实验

上机实验
主讲教师:袁凌
数据结构
实验目的
1.加深对数据结构和算法的理解,进一步 提高学生编程能力; 2.培养和提高学生分析问题与解决问题的 综合能力; 3.整理资料,撰写规范的实验报告。
华中科技大学计算机学院
2
数据结构
实验要求
1. 独立完成,完全雷同者记0分;
2. 撰写实验报告,每个实验报告如下内容: 一、问题描述 二、算法和数据结构设计 三、C语言程序实现 四、程序测试 五、复杂度分析
华中科技大学计算机学院 8
实验题目
第二次上机试验
实验(三) 基于二叉链表,实现二叉树的下列运算。 ① 二叉树生成; ② 前序、中序和后序遍历; ③ 计算叶子数目; ④ 按层次遍历; ⑤ 求二叉树高度; 提示: ⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定 ⑶ ②、③和⑤运算分别采用递归和非递归算法实现
⑶ 线性表数据可以使用磁盘文件永久保存
华中科技大学计算机学院
6
数据结构
实验题目
第一次上机试验
实验(二) 基于链式存储结构,实现线性表的基本的、常见 的运算。
提示:
⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定
⑶ 线性表数据可以使用磁盘文件永久保存
华中科技大学计算机学院
7Байду номын сангаас
数据结构
3. 《实验报告》和《源程序》,以班为单位提交光盘。
华中科技大学计算机学院
3
数据结构
报告格式
华中科技大学计算机学院
4
数据结构
报告格式
华中科技大学计算机学院
5
数据结构
实验题目
数据结构实验一 约瑟夫环问题实验报告电子版

for(i = 1;i<length;i++){
tmp = (Node *)malloc(sizeof(Node));
tmp->number = num[i];
tmp->pass = pas[i];
pri->next = tmp;
pri = tmp;
pri->next = head;
for(i=0;i<time;i++){ //找到要删除的结点
tmp = tmp->next;
}
printf("%d ",tmp->number);
timeห้องสมุดไป่ตู้= tmp->pass - 1;
deleteFromList(&head,tmp);//删除结点
tmp = tmp->next;//从下一个结点又开始计算
initList(head);
createFromTail(head,num,pas,sizeof(num)/sizeof(num[0]));
p = head;
printf("\n约瑟夫计数前,每个数和他的密码:\n");
for(i = 0;i<sizeof(num)/sizeof(num[0]);i++){
}
}
// 从链表中删除
void deleteFromList(List *head,Node *tmp)
{
Node *tmp1;
Node *tmp2;
tmp1 = *head;
tmp2 = tmp1;
//如果链表剩了一个元素
数据结构上机实验

数据结构上机实验本课程实验中已知的预定义常量和类型如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;实验一顺序表(一)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容已知:线性表的动态分配顺序存储结构为#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;在主程序中调用如下函数实现构造线性表,在线性表中插入数值,最后输出线性表。
1. 编写函数,Status InitList(SqList *L) 实现构造一个空的线性表,若构造成功则返回OK,否则返回ERROR。
2. 编写函数,Status ListInsert(SqList *L , int i , int e) 实现在线性表L中第i个位置之前插入新的数据元素e,L的长度加1。
若插入成功返回OK,否则返回ERROR。
(提示:i的合法值为:i>=1&&i<=L—>length+1)3. 编写函数,void ListPrint(SqList *L)实现将线性表中的元素依次输出到屏幕上。
4.编写函数,int Menu(),输出菜单项请选择你要进行的操作(请输入1-4中的任一个数字):输入1:InitList2:ListInsert3:ListPrint4:Exit实验二顺序表(二)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容在实验一的基础上,继续完成如下实验内容。
1.编写函数,Status ListDelete(Splist *L ,int i ,int *e),实现删除L的第i个数据元素,并用e返回其值,L的长度减1。
数据结构上机实验报告

数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
数据结构第一次上机实验报告

数据结构第一次上机实验报告(线性表)实验要求:1、实现顺序表结构的创建、插入、删除、查找等操作;2、利用上述顺序表操作实现如下程序:建立两个顺序表表示的集合(集合中无重复的元素),并求这样的两个集合的并、交和源程序://C++实现//visual studi o 2010下编译通过#include<iostream>#include<vector>#include<algorithm>using namespace std;const size_t MaxSize=20;//顺序表初始分配量class SqList//顺序表类{//privata:int data[MaxSize];int length;//顺序表长度public:void InitList();//初始化void CreatList(int a[],int n);//创建void SearhList();//查找void InsertList();//插入void DeleteList(); //删除};//初始化线性表void SqList::InitList(){length=0;}//创建线性表void SqList::CreatList(int a[],int n){ cout<<"创建的顺序表:\n";for(int i=0;i<n;++i){data[i]=a[i];cout<<data[i]<<" ";}cout<<endl;length=n;}//顺序表的查找void SqList::SearhList(){int k=0;int number;//要查找的数据if(length==0)cout<<"空表"<<endl;else{cout<<"输入要查找的数据:"<<endl;cin>>number;for(int i=0;i<length;++i){if(data[i]==number){k=1;cout<<"查找成功,下标为:"<<i<<endl;break;}//if}//for}//el se}//顺序表的插入void SqList::InsertList(){int i,number;cout<<"请输入要插入的数据:"<<endl;cin>>number;cout<<"输入插入的位置:"<<endl;cin>>i;while(i<1||i>length){cout<<"越界,请重新输入插入位置:"<<endl;cin>>i;}i=i-1;for(int j=length+1;j>i;--j)data[j]=data[j-1];//插入位置后面的元素后移一位data[i]=number;//插入元素length=length+1;//表长加1cout<<"插入元素的线性表:\n";for(int k=0;k<length;++k)cout<<data[k]<<" ";cout<<endl;}//顺序表的删除void SqList::DeleteList(){int i;cout<<"输入要删除的位置:"<<endl;cin>>i;while(i<1||i>length){cout<<"越界,请重新输入要删除的位置:"<<endl;cin>>i;}i=i-1;for(int j=i;j<length-1;++j)data[j]=data[j+1];length=length-1;cout<<"删¦除后的顺序表:\n";for(int k=0;k<length;++k)cout<<data[k]<<" ";cout<<endl;}int main(){SqList L;L.InitList();//初始化int a[10];cout<<"向线性表输入数据(10个各不相等Ì的整数):"<<endl;for(int m=0;m<10;++m)cin>>a[m];L.CreatList(a,10);L.SearhList();L.InsertList();L.DeleteList();cout<<"线性表集合操作"<<endl;vector<int> ivec1;vector<int> ivec2;cout<<"向线性表输入数据(10个各不相等的整数):"<<endl;//以矢量容器的形式存储线性表for(int n=0;n<10;++n){while(cin>>a[n]){ivec1.push_back(a[n]);break;}}cin.clear();cout<<"向线性表输入数据(10个各不相等的整数):"<<endl;for(int n=0;n<10;++n){while(cin>>a[n]){ivec2.push_back(a[n]);break;}}//对线性表进行排序sort(ivec1.begin(),ivec1.end());sort(ivec2.begin(),ivec2.end());cout<<"线性表1排序后:"<<endl;for(vector<int>::iterator iter1=ivec1.begin();iter1!=ivec1.end();++iter1) cout<<*iter1<<" ";cout<<endl;cout<<"线性表2排序后¨:"<<endl;for(vector<int>::iterator iter2=ivec2.begin();iter2!=ivec2.end();++iter2) cout<<*iter2<<" ";cout<<endl;//两线性表的交void AND(vector<int> &ivec1,vector<int> &ivec2);{vector<int> ivec;for(vector<int>::iterator it1=ivec1.begi n();it1!=ivec1.end();++it1){for(vector<int>::iterator it2=ivec2.begi n();it2!=ivec2.end();++it2){if(*it1==*it2)ivec.push_back(*it1);}}cout<<"两线性表的交:"<<endl;if(ivec.empty()) cout<<"为空";else{for(vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)cout<<*it<<" ";}cout<<endl;}//两线性表的并void OR(vector<int> &ivec1,vector<int> &ivec2);{vector<int> ivec;for(vector<int>::iterator it1=ivec1.begi n();it1!=ivec1.end();++it1)ivec.push_back(*it1);for(vector<int>::iterator it2=ivec2.begin();it2!=ivec2.end();++it2)ivec.push_back(*it2);sort(ivec.begin(),ivec.end());vector<int>::iterator end_unique=unique(ivec.begin(),ivec.end());//uni que函数将相同数据中的一个放入最后ivec.erase(end_unique,ivec.end());//erase删除unique函数返回位置到表最后的所有元素cout<<"两线性表的并:"<<endl;for(vector<int>::iterator it=ivec.begin();it!=ivec.end();++it)cout<<*it<<" ";cout<<endl;}//两线性表的差void cha(vector<int> &ivec1,vector<int> &ivec2);{vector<int>::iterator iter1;vector<int>::iterator iter2;int flag = 0;cout<<"线性表1对线性表2的差:"<<endl;for(iter1=ivec1.begin();iter1!=ivec1.end();++iter1){flag = 0;for(iter2=ivec2.begin();iter2!=ivec2.end();++iter2){if((*iter1)==(*iter2)){flag = 1;}}if(flag==0){cout << *iter1 << " ";}}if(flag==1)cout << "为空" << endl;else cout << endl;}}结果:。
数据结构上机报告1

实验1(线性表):任意输入一串字符,将该字符串看成一个线性表,以链式存储结构(或者静态链表)实现这个线性表,并进行线性表的查找、插入、删除和就地逆置等操作1.需求分析意输入一串字符,将该字符串看成一个线性表,以链式存储结构(或者静态链表)实现这个线性表,并进行线性表的查找、插入、删除和就地逆置等操作2.详细设计1.主函数{输入字符串;生成线性表;调用函数,实现操作;}2.调用函数{ 查找函数;插入函数;删除函数;逆置函数;}3.调用关系图为:void main(){ list_search(); list_insert;list_delete; list_turn()}ADT List{数据对象:D={a i|a i=ElemSet,i=1,2,……,n,n≧0}数据关系:R1={<a i-1,a i>| a i-1,a i€D, i=1,2,……,n }基本操作:list_search (&l); //查找函数list_insert (&l); //插入函数list_delete (&l) ; //删除函数list_turn (&l) //就地逆置}3.用户使用说明先输入一个字符串,回车键结束,程序会自动生成一个线性链表;接着会出现操作选择界面,输入所要进行的操作:输入1进行查找操作,输入要查找元素就会输出元素位置;程序如下:#include<stdio.h>#include<stdlib.h>#include<string.h>struct node{ char data;struct node* prior;struct node* next;};void list_search(struct node* head);void list_insert(struct node* head,int lenth);void list_delete(struct node* head,int lenth);void list_turn(struct node *head);//主函数void main(){struct node head;head.data=0;head.next=NULL;head.prior=NULL;struct node* p=&head;struct node* q=&head;int i=0;char c;printf("请输入字符串:\t");scanf("%c",&c);while(c!='\n'){i++;q=(struct node*)malloc(sizeof(struct node));q->prior=p;q->next=NULL;q->data=c;p->next=q;p=q;scanf("%c",&c);}fflush(stdin);int number=i;p=&head;printf("生成的线性表为:\n");while(p->next){p=p->next;printf("%c",p->data);}int flag=1;char choose;char judge[4];while(flag){printf("\n");printf("请输入你想进行的操作:\n");printf("1---查找\t");printf("2---插入\t");printf("3---删除\t");printf("4---就地逆置\n");int flag1=1;while(flag1){scanf("%c",&choose);fflush(stdin);if(choose=='1'){list_search(&head);flag1=0;} if(choose=='2'){list_insert(&head,number);flag1=0;p=&head;printf("线性表现在变为:\n");while(p->next){p=p->next;printf("%c",p->data);}}if(choose=='3'){list_delete(&head,number);flag1=0;p=&head;printf("线性表现在变为:\n");while(p->next){p=p->next;printf("%c",p->data);}}if(choose=='4'){list_turn(&head);flag1=0;p=&head;printf("线性表现在变为:\n");while(p->next){p=p->next;printf("%c",p->data);}}}int i=number;fflush(stdin);printf("\n继续请输入yes,退出请输入no\n");gets(judge);if(strcmp(judge,"yes")) flag=0;if(strcmp(judge,"no"));}//whileprintf("谢谢使用~\n");}//main//查找函数void list_search(struct node* head){char temp;printf("请输入你要查找的元素:\n");fflush(stdin);scanf("%c",&temp);struct node* p=head;struct node* q=head;int i=0;int flag=1;while(p->next){p=p->next;i++;if(p->data==temp){printf("所查元素的位置是:\t");printf("%d\n",i);flag=0;printf("\n");}}if(flag) printf("所查元素不在线性表内!\n"); }//list_search//插入函数void list_insert(struct node* head,int number){char temp;int pos;printf("请输入你要插入的元素:\n");fflush(stdin);scanf("%c",&temp);int flag=1;while(flag){printf("请输入所插入元素的位置\n");fflush(stdin);scanf("%d",&pos);if(pos>=number||pos<=0) {printf("输入错误,请重新输入!\n");continue;} else flag=0;}struct node* p=head;struct node* q=head;int i=0;while(i<pos-1){p=p->next;i++;}q=(struct node*)malloc(sizeof(struct node));q->data=temp;p->next->prior=q;q->next=p->next;q->prior=p;p->next=q;}//list_insert//删除函数void list_delete(struct node* head,int number){int temp;int flag=1;while(flag){printf("请输入所要删除元素的位置:\n");fflush(stdin);scanf("%d",&temp);if(temp>=number||temp<=0) {printf("输入错误,请重新输入!\n");continue;} else flag=0;}struct node* p=head;struct node* q=head;while(temp){p=p->next;temp--;}q=p->prior;q->next=p->next;if(p->next)p->next->prior=q;free(p);}//list_delete//逆置函数void list_turn(struct node *head) {struct node* p=head;struct node* q=head;struct node* r=q->next;while(r){p=r;r=r->next;q=p->prior;p->prior=p->next;p->next=q;}p->prior=head;head->next->next=NULL;head->next=p;p=head;}//list_inverse set调试结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
青岛理工大学数据结构课程实验报告课程名称数据结构班级软件131 实验日期 4.15姓名学号实验成绩实验名称线性表的顺序表示与链式表示实验目的及要求实验目的1.加深理解线性表的顺序表示与链式表示的意义和区别,掌握用它们表示时各基本操作的设计与实现。
2.学会定义线性表的顺序存储类型和链式存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。
3.掌握线性表的基本操作(初始化、建立、插入、删除、遍历等)。
4.掌握对多函数程序的输入、编辑、调试和运行过程。
5.进一步熟练C语言的使用,特别是指针和链表的使用。
能在实际应用背景下恰当选择顺序存储和链式存储。
实验要求1.预习C语言中的结构的定义和基本操作方法2.对线性表的每个基本操作用单独的函数实现3.编写完整程序完成下面的实验内容并上机运行4.整理并上交实验报告实验环境硬件平台:普通的PC机软件平台:Windows 2003操作系统编程环境:VisualC++实验内容1.分别建立包含10个数据元素的顺序线性表和链式线性表;2.从键盘输入一个数据元素和插入位置k,将元素插入到线性表中第k(包含0号位置)个位置;3.从键盘输入一个数据元素关键字或位置k(包含1号位置),从线性表中删除相应数据元素;4.能完成查找功能;5.给出程序及插入、删除前和插入、删除后线性表结果。
//创建顺式线性表struct number *creat(void){struct number *head,*p1;p1=head=(struct number*)malloc( SIZE * sizeof(struct number));scanf("%ld",&p1->num);for(;p1->num!=0;L++){算法描述及实验步骤p1++;scanf("%ld",&p1->num);}return(head);}//输出顺式线性表中的元素void print(struct number*head){struct number *p;int s=L;p=head;if(p!=0){printf("\n您输入的数据为:\n");for(;s>0;p++,s--)printf("%ld ",p->num);}}//查找顺式线性表中的元素void search(struct number *head){struct number *p;long num1;int n=0,s=0;p=head;printf("\n请输入您要查找的数据:\n");scanf("%ld",& num1);if(head!=0)for(;p->num!=0;p++){n++;if(p->num==num1){s=1;break;}}if(s==0)printf("\n没有您所要查找的数据\n");elseprintf("\n找到您所需数据'%ld'在表中第%d个\n",num1,n); }//插入顺式线性表的元素struct number *insert(struct number*head){struct number *p1,*p2;int n=1;long num1;p1=p2=head;p2=p2+L-1;printf("\n请输入您要插入的数据:\n");scanf("%ld",&num1);if(num1<p2->num){for(p1=head;p1->num<num1;p1++)n++;for(;p2>=p1;p2--)(p2+1)->num=p2->num;}(p2+1)->num=num1;L++;return(head);}//删除顺式线性表的元素struct number *del(struct number*head){struct number *p1,*p2;long num1;int n=1;p1=p2=head;printf("\n请输入要删除的数据:\n");scanf("%ld",&num1);p2=p2+L-1;for(;p1->num!=num1 && n<=L;p1++) n=n+1;if(n>L){printf("\n没有您要删除的数据\n");return(0);}else{for(;p1<=p2;p1++)p1->num=(p1+1)->num;L--;return(head);}}struct list *creat_n()//创建有n个元素的链表{struct list *q,*p,*head=NULL;printf("\n输入你所要创建的结点数: ");scanf("%d",&length);head=p=(list*)malloc(sizeof(list)); //创建一个新结点并用头指针指向它printf("输入该结点的值: ");scanf("%d", &p->data);p->next=NULL;for(int i=length-1;i>=1;i--){q=p;p=(list*)malloc(sizeof(list)); //创建新结点printf("输入该结点的值: ");scanf("%d", &p->data);q->next=p;}printf("输入完毕\n\n");p->next=NULL;return head;}struct list * output()//输出表长与结点值函数{struct list *p;p=head;printf("\n当前链表中存有的元素:\n");while(p!=NULL){printf("%d\n",p->data);p=p->next;}printf("当前的表长是: %d\n\n",length);//输出当前表长return head;}void insert()//插入结点函数{struct list *k,*p,*q;int x;printf("请输入你要在哪个结点值之前插入新结点: ");scanf("%d",&x);k=(list*)malloc(sizeof(list));//创建新结点printf("请输入新结点的值: ");scanf("%d",&k->data);k->next=NULL;if(head==NULL)//若链表为空,则直接入链表{head=k;length=length+1;printf("插入成功\n\n");}else if(head->data==x)//在第一个结点前插入新结点{k->next=head;head=k;printf("插入成功\n\n");length=length+1;}else{q=head;p=head->next;while((p != NULL) && (p->data != x))//找出值为X的结点的位置{q = p;p = p->next;}if (p == NULL){q->next=k;//在链表末插入新结点printf("插入成功\n");length=length+1;}else if(p->data == x)//在要求的X结点前插入新结点{k->next=p;q->next=k;printf("插入成功\n\n");length=length+1;}}output();}int delet()//删除结点函数{struct list *q,*p;int x,y;printf("请输入你所要删除的结点值: ");scanf("%d",&x);if(head==NULL)//表空{printf("表空\n");return 0 ;}else if(x==head->data)//第一个结点为删除的结点{q=head;head=head->next;y=q->data;free(q);printf("删除成功\n\n");length=length-1;output();return(y);}else{q=head;p=head->next;while((p != NULL) && (p->data != x))//找出值为X的结点{q=p;p=p->next;}if(p==NULL)printf("没有删除对象\n");}if(x==p->data)//删除值为X的结点{q->next=p->next;y=p->data;free(p);printf("删除成功\n\n");length=length-1;output();return (y);}else{printf("表中没有指定的结点\n");output();return 0;}}return 0;}void find(){struct list *p;int k,x,i=1;char y,n;LOOP:p=head;printf("请输入你要查找的结点值: ");scanf("%d",&x);while(p->data!=x){p=p->next;i++;}printf("你所查找的结点是表中第%d 个结点!\n\n",i);printf("是否要继续查找,请输入y/n\n\n");k=getch();if(k=='y'){i=1;goto LOOP;}elsereturn;}调试过程及实验结果程序运行过程中输入了顺序表,结果输出结果符合情况,程序成功。