实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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&&j 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);