实验三、线性表的链式存储

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

{

相关文档
最新文档