实验三、线性表的链式存储
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二线性表的链式存储
实验目的:
●掌握线性表的链式存储结构的定义及C语言实现
●掌握单链表中的各种基本操作(单链表的建立、合并、删除等)实验内容:
1、单链表的建立及输出(插入)
参考代码:
/*保存在头文件Linklist.h*/
#include
#include
#define NULL 0
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*Linklist;
//使用尾插法创建单链表
void creatlist_L(Linklist L,int n)
{
int i;
Linklist p,q;
q=L;
for(i=1;i<=n;i++)
{
p=(Linklist)malloc(sizeof(Lnode)); printf("输入线性表的第%d个元素:",i); scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=q->next;
}
}
//使用头插法创建单链表
void creatlist_L(Linklist L,int n)
{
int i;
Linklist p;
p=L;
for(i=n;i>0;i--)
{
p=(Linklist)malloc(sizeof(Lnode));
printf("输入线性表的第%d个元素:",i);
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
void traverlist_L(Linklist head)
{
Linklist p;
printf("以head 为头指针的单链表中的元素为:"); p=head->next;
while(p!=NULL)
{
printf("%5d ",p->data);
p=p->next;
}
printf("\n");
}
#include
#include
void main()
{
Linklist head;
int n;
printf("********建立一个单链表中的操作******\n");
printf("输入要建立链表的长度:");
scanf("%d",&n);
head=(Linklist)malloc(sizeof(Lnode));
head->next=NULL;
creatlist_L(head,n);
printf("\n********输出单链表中元素*****\n");
traverlist_L(head);
}
2、单链表的查找
创建一个单链表,编写单链表的查找函数,实现单链表的查找。
int Getelem(Linklist L,int i,Elemtype &e)
{
int j;
Linklist p;
p=L->next;
j=1;
while(p&&j
{
p=p->next;
++j;
}
if (!p||j>i)
return NULL;
e=p->data;
return e;
}//按序查找
void Getelem(Linklist L,Elemtype e)
{
Linklist p;
p=L->next;
while(p && p->data!=e)
{
p=p->next;
printf("\n查找成功!\n");
}
if (!p)
printf("\n查找失败!\n");
}
//按值查找
3、单链表的删除
创建一个单链表,编写函数实现单链表的删除操作。
void Listdelete(Linklist &L,int i)
{
Linklist p,q;
p=L;
int j=0;
while((p->next)&&(j { p=p->next; ++j; } if(!(p->next)||(j printf("删除位置不合理,操作失败!"); else { q=p->next; p->next=q->next; delete q; printf("删除成功!"); } } //删除指定位置的元素 4、有序单链表的合并 建立两个带头结点的有序单链表La,Lb(单调递增),利用La,Lb的结点空间,将La和Lb合并成一个按元素值递增的有序单链表Lc。 参考代码: #include void mergelist_L(Linklist La,Linklist Lb,Linklist &Lc) { InList(Lc); int i,j,k,La_len,Lb_len,e,ai,bj; i=j=1; k=0; La_len=ListLength(La); Lb_len=ListLength(Lb); while((i<=La_len)&&(j<=Lb_len)) { ai=GetElem(La,i,ai); bj=GetElem(Lb,j,bj); if(ai<=bj) {