学号:201560140140 姓名:袁若飞
(1)依次从键盘读入数据,建立带头结点的单链表; (2)输出单链表中的数据元素
(3)求单链表的长度;
(4)根据指定条件能够取元素和修改元素; (5)实现在指定位置插入和删除元素的功能。 [测试数据]
由学生任意指定。
创建单链表读入数据:1 2 3 4 5 4 2 输出单链表中数据为:1 2 3 4 5 4 2 返回单链表长度:7
在5前面插入数据元素:1 2 3 4 4 5 4 2 删除第一个数据元素:2 3 4 5 4 2 修改最后一个数据元素:1 2 3 4 5 4 1
设计分析:
从上面的问题描述可以知道我们要实现的操作:“依次从键盘读入数据,建立带头结点的单链表,然后就是对此单链表的一些基本操作如增删改查等”,对此我们设计出了一个单链表用于存放数据,所以对数据应该采用的是链式存储结构。每个元素之间的关系,可通过在每个节点当中设置一个指针来存放下一个元素的地址来体现。其次就是基本操作就是对此单链表中数据存储结构的更改,通过调用链表指针操作其存储地址。
于是可以声明结构类型为: typedef struct LNode{ ElemType data;
struct LNode *next; }LNode,*LinkList;
1.先动态创建一个单向循环链表,每个节点包含数据的地址和指向下一个节点的地址。
2.查找单链表的头节点并返回其地址,依次从键盘输入数据并把它们的地址返回。
3.根据单链表的头结点的地址依次输出单链表中数据元素,并返回单链表的长度。
第 9 页
学号:201560140140 姓名:袁若飞
4.从单链表中删除出数据元素的节点,并返回新的单向循环链表的头指针的值。
5.利用预定义的指针指向指定位置插入或删除单链表中的数据元素。
运行结果如下图:
1)实现建立单链表功能
2)实现输出功能
3)实现链表长度功能
4)实现取元素功能
第 10 页
学号:201560140140 姓名:袁若飞
5)实现修改功能
[源代码](加注释)
#include
#define List_Init_Size 100 #define ListIncrement 10 #define ElemType int #define null 0 typedef struct LNode{ ElemType data; struct LNode *next; }LNode,*LinkList; void main(){
void Create(LinkList &L);
void Insert(LinkList &L,int i,ElemType e); void Delete(LinkList &L,int i);
ElemType GetElem(LinkList &L,int i);
第 11 页
学号:201560140140 姓名:袁若飞
void Output(LinkList &L);
void Modify(LinkList &L,int i,ElemType elem); LinkList l;
int choose,location,value,times=0,createTimes=0,insertTimes=0; printf(\请选择你要执行的操作对应的数字:\\n0-退出,1-创建,2-添加,3-删printf(\你必须先创建单链表\\n\scanf(\while(choose!=0){
if(choose==1) Create(l);
int GetLength(LinkList &L);
除,4-读元素,5-遍历,6-获取长度,7-修改\\n\
else if(choose==2){
printf(\请输入你要添加元素的位置和值,中间用空格隔开。例如:1 2\\n\
}
else if(choose==3){ }
else if(choose==4){ }
else if(choose==5)
printf(\请输入你要读的数据的位置:\\n\
printf(\切记:位置要大于0,并且小于%d\\n\scanf(\
printf(\切记:位置要大于0,并且小于%d\\n\scanf(\Delete(l,location); if(insertTimes==0){
printf(\切记:位置必须为1\\n\ } else
scanf(\Insert(l,location,value);
insertTimes++;
printf(\切记:位置要大于0,并且小于%d\\n\
printf(\请输入你要删除元素的位置:\\n\
printf(\
Output(l);
第 12 页