【C/C++数据结构实验】这个系列是我这个学期上的数据结构课上老师布置的实验,实验题目如下。我一般用c++,但是没有用到类啥的,就是普普通通的面向过程的思想不是面向对象的思想,只是借用c++的一些方便的环境,比如形参处可以写——*&,引用型参数很好用。
有需要的同学们自取吧,虽然算法不是很巧妙,但是都是我实实在在学完了自己一点点写出来的,运行结果是完全没问题的。正好这门课结课了,发上来我也能再复习一下!
一、实验题目上机实验题3:链表基本操作的实现
建立单链表存储数据(10,20,30,40,50,60,70,80,90,100),要求:
(1)头插法或尾插法建立单链表,并输出单链表中所有元素;
(2)输出单链表中的最大值和最小值;
(3)键盘输入一个值x,输出链表中第一个值为x的元素的位序;
(4)键盘输入一位序值b,在第b个元素之前插入值为500的元素,输出链表中的所有数据;
(5)键盘输入位序值m,删除位序为m的元素,输出链表中的所有数据;
(6)输出单链表的长度。
(要求尽量将每一个操作模块化,可以将链表头指针设置成全局变量,也可以采用引用型参数。)
二、实验具体算法(c++)#include#include #define MaxSize 50 using namespace std; typedef int ElemType; //声明LinkNode类型 typedef struct LNode{ ElemType date;//存放元素值 struct LNode *next;//指向后继节点的指针域 }LinkNode; //建立单链表,头插法 void CreateListR(LinkNode *&L,ElemType a[],int n) {int i=0; L=(LinkNode*)malloc(sizeof(LinkNode)); L->next=NULL;//建立单链表并且为其初始化,将其next域置零 LinkNode *p; while(i<=n) { p=(LinkNode*)malloc(sizeof(LinkNode));//为每一个a[i]对应的数值建立一个新的结点,将a[i]的数值赋给这个新的结点 p->date=a[n-i]; p->next=L->next;//将p所指的结点插入到L链表的头节点之后的首节点位置 L->next=p; i++; } } //比较大小 void MaxMin(LinkNode *L) {int max,min; max=L->next->date; min=L->next->date; LinkNode *p=L->next;//p指向L链表的首节点 while(p->next!=NULL) { if(max date) max=p->date; if(min>p->date) min=p->date; p=p->next; } cout<<"max="< next;//p指向首结点 while(p->next!=NULL) { cout< date<<" "; p=p->next;//p指向L的下一个结点 } cout< next; if(i<1) {cout<<"插入位序不合理!"< next; j++; } if(p==NULL) { cout<<"第"< date=e; s->next=p->next; p->next=s; cout<<"插入成功!"< next;//p指向L首结点 if(i<1) { cout<<"位序错误!"< next; if(p==NULL) { cout<<"给出的位序超出链表元素最大位序,不存在该结点,无法删除!"< next;//!!!此步非常关键,如果不把第i个指针存起来,在删除时,无论是先连接还是先free都会出现问题——丢失掉第i个结点后续的结点 p->next = s->next; free(s);//释放掉第i个结点 } } //按元素查找 void LocateList(LinkNode *L,ElemType e) { int i; LinkNode *p=L->next; for(i=1;p!=NULL&&p->date!=e;i++)//由于此处的p是指针,且没有为其分配内存空间,故p为纯指针,p表示指针p(所指向的值)的地址 p=p->next; if(p==NULL) cout<<"不存在数值"< next; int i=1; while(p->next!=NULL) { p=p->next; i++; } return i; } //销毁链表 void DestroyList(LinkNode *&L) { LinkNode *p=L,*s=L->next; while(s->next!=NULL) { free(p); p=s; s=s->next; } free(s); cout< >x; LocateList(m,x); cout<<"(4)将在位序b之前插入值为500的元素,请输入位序b:"; cin>>b; ListInsert(m,500,b); cout<<"输出链表:"< >k; ListDelect(m,k); cout<<"输出链表:"< 三、实验总结与收获 我怕我忘了,我记性不好,所以当时把能想到的,还有我自己调出来的错误都给写在注释里了。说实话,当时写实验报告的时候,实验收获是最难写的,尤其是前几个实验没有总结的意识,导致写完程序过几天写报告的时候脑子空空如也。大家一定要想到什么就写出来,记在脑子里真的会忘的!!(也可能我是金鱼的记忆???)



