实验报告1

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

实验一创建链表和链表操作

一、实验目的

掌握线性表的基本操作:插入、删除、查找、以及线性表合并等操作在顺序存储结构和链式存储结构上的实现。

二、实验内容:

1. 创建单链表

2.在链表上进行插入、删除操作;

3.设计一个程序,用两个单链表分别表示两个集合,并求出这两个集合的并集。

四、测试数据:

∙(3,9,5,6,11,8);在5之前插入4,7,并删除11

∙求集合{1,12,8,6,4,9}和{2,5,12,7,4}的并集

五、概要设计:

本操作应完成如下功能:

(1)创建链表

说明:分配一定的空间,根据给定的链表长度输入值,创建链表。

(2)合并链表

说明:将两个链表合并为一个链表只需修改链表头、尾指针即可实现。

(3)在链表中插入值

说明:将给定的值插入到指定位置上,只需修改插入位置的前后结点的指针即可。

(4)在链表中删除值

说明:将指定位置的值删除,只需修改删除位置的前后结点的指针即可。

六、详细设计:

源代码:#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW 0

//线性链表的存储结构,一个结点

typedef struct LNode

{

int data; // 数据域

struct LNode *next; // 指针域

}LNode,*LinkList; //结点结构类型和指向结点的指针类型int TraverseList_L(LinkList L) //遍历单链表

{

LinkList p;

p=L->next;

while(p)

{

printf("-->%d",p->data);

p=p->next;

}

return OK;

}

//尾插法创建的带头结点的单链表。

void CreateList_L(LinkList &L,int &n)

{

L=(LinkList)malloc(sizeof (LNode));//建立一个空链表L。

if(!L)

{

exit(OVERFLOW);

}

else

L->next=NULL;

int i=0;

LinkList p,q;

printf("请输入要在该链表存放的值");

q=L;

for(i=0;i

{

p=(LinkList)malloc(sizeof (LNode));//生成新结点。

scanf("%d",&p->data);

p->next=q->next;

q->next=p;

q=p;

}

}

LinkList MergeList_L(LinkList &LA,LinkList &LB)//合并LA和LB链表为LC。{

LNode *p,*q;

p=LA;

while(p->next!=NULL) p=p->next;//p指向尾结点

q=LB->next;

p->next=q;

free(LB);

return(LA);

}

//在第i个元素插入一个元素e。

LinkList ListInsert_L(LinkList &L,int i,int e)

{

LNode *p,*s;int j;

printf("请输入要插入的结点位置:");

scanf("%d",&i);

p=L;j=0;

while(p&&jnext;++j;} //寻找第i-1个结点。

if(!p||j>i-1)

{printf("您插入的位置不合法,不合法");

return 0;} //判断i的值是否合法

s=(LinkList)malloc(sizeof(LNode));

if(!s) exit(OVERFLOW);

printf("请输入要在该结点存放的数值:");

scanf("%d",&e);

s->data=e;s->next=p->next;

p->next=s;

return(L);

}

//删除结点

LinkList ListDelete_L(LinkList &L,int i,int e)

{

LNode *p,*q;

p=L;int j=0;

printf("请输入要删除的结点的位置:");

scanf("%d",&i);

while(p->next && j

{p=p->next;++j;}

if(!(p->next)||j>i-1)

{

printf("您删除的位置不合法,不合法");

return 0;

}

q=p->next;p->next=q->next;

e=q->data;

}

//主函数。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。void main()

{

int n,i,e,m,j;

LinkList L,LA,LB,LC,LLL;

LNode *MergeList;

printf("请输入要定义的LA链表长度:");//输入链表LA值。

scanf("%d",&n);

CreateList_L(LA, n);

相关文档
最新文档