这是我写的关于动态链表最全面的代码了,包括增删改查逆置合并等等。
由于第九题和第十一题很简单,延伸发展一下就行了,所以我没有深入写下去。
如果有类似的题目建议不要抄我的应付了事,毕竟做学问还得在自身。
一、实验目的、要求
1.掌握握单链表的基本操作:插入、删除、查找等运算。
2.掌握单向链表的存储特点及其实现。
二、实验内容
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。
2.遍历单向链表。
3.把单向链表中元素逆置(不允许申请新的结点空间)。
4.在单向链表中删除所有的偶数元素结点。
5.编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建立一个
非递减有序单向链表。
6.利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
7.利用算法5建立两个非递减有序单向链表,然后合并成一个非递减链表。
8.利用算法1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为
偶数(尽量利用已知的存储空间)。
- 9.采用单向链表实现一元多项式的存储并实现两个多项式相加并输出结果。
10.在主函数中设计一个简单的菜单,分别调试上述算法。
*11.综合训练:利用单向循环链表实现一个班级学生信息管理(数据录入、插入、删除、排
序、查找等,并能够实现将数据存储到文件中)
三、实验说明
1.类型定义
#include <stdio.h>
typedef int ElemType;//元素类型
typedef struct LNode
{ElemType data;
struct LNode *next;
}LNode,*LinkList;
2.为了算法实现简单,最好采用带头结点的单向链表。
四、注意问题
1.重点理解链式存储的特点及指针的含义。
2.注意比较顺序存储与链式存储的各自特点。
3.注意比较带头结点、无头结点链表实现插入、删除算法时的区别。
4.单向链表的操作是数据结构的基础,一定要注意对这部分的常见算法的理解`
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType; //元素类型
typedef struct LNode
{
ElemType data; //数据
struct LNode *next; //next为指针
}LNode,*LinkList;//LinkList为指针
LNode* createlist1(){
LNode *head;//头指针
LNode *p1,*p2;//p1为新节点指针,p2为上一个节点的指针
int n = 0; //临时变量n来记录节点个数
head = NULL;//初链表为空所以head设为NULL
p1 = p2 =(LNode *)malloc(sizeof(LNode));//使用内存块函数malloc开辟第一个节点,并让p1、p2指向它
cout<<"请输入节点的值,输入0结束:"<<endl;
cin>>(p1->data);
while(p1->data!=0)
{
n++;
if(n==1)
{
head = p1;//设置头指针
}
else
{
p2->next=p1;
}
p2 = p1;
p1 = (LNode *)malloc(sizeof(LNode));
cout<<"请输入节点的值,输入0结束:"<<endl;
cin>>(p1->data);
}
p2->next=NULL;//p2为最后一个节点
return head;//可以将声明换成void同时不返回
}
LNode* createlist2(){
LNode *head;//头指针