数据结构课程设计-单链表的插入、删除、查找等

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

单链表的插入、删除、合并等基本操作

一、实验目的

1、理解数据结构中单链表的定义和建立。

2、掌握单链表中结点结构的C语言描述。

3、熟练掌握单链表的插入、删除和修改等算法的设计与C语言实现。

4、将理论与实际相结合,切实提高自己的逻辑能力和动手能力。

二、设计内容

1、输入单链表长度,创建一个单链表。

2、对建立好的单链表进行插入操作。

3、对建立好的单链表进行删除操作。

4、对建立好的单链表进行合并操作。

三、概要设计

抽象数据类型线性表的定义如下:

ADTA List{

数据对象:D={ai I ai∈ElemSet , i=1 ,2 , … , n n>=0 }

数据关系:R1={ I ai-1 , ai∈D , i=2 , … , n }

基本操作:

Creates( &L )

操作结果:构建一个空的线性表L。

Insertsl( &L , k ,i)

初始条件:线性表L已存在。

操作结果:在带有头结点单链表的第k个元素之前插入元素i。

Deletesl( &L , i, j )

初始条件:线性表L已存在。

操作结果:删除指定位置j元素i。

Hebing( &L )

初始条件:线性表L已存在。

操作结果:清除新链表中相同的元素。

}ADT List

四、算法流程图

五、算法源代码

#include #include

typedef struct node {

int data;

struct node *next; }node;

node *head;

int k;

node * creates()

{

node *p,*s,*h;

int j=1,x, n;

p=h=(node*)malloc(sizeof(node));

h->next=NULL;

printf("请输入链表长度:");

scanf("%d",&n);

printf("请输入 %d 个数字创建链表:",n);

while(j<=n)

{

scanf("%d",&x);

s=(node*)malloc(sizeof(node));

s->data=x;

p->next=s;

p=s;

j++;

}

p->next=NULL;

return h;

}

void insertsl(node *head, int k, int i)

{

/*在带有头结点单链表的第k个元素之前插入元素i*/ int j;

node *p, *t;

p=head;

j=0;

while ( p&&j

p = p->next;

j++;

}

if (!p||j>k-1) /*k小于1或大于表长*/

printf("插入位置不对。\n");

t=(node *)malloc (sizeof (node)); /*生成新结点*/

t->data=i;

t->next=p->next; /*插入新结点*/

p->next=t;

} /*insertsl*/

void deletesl(node *h,int i)

{

node *p,*s,*q;

int j=1;

p=h;

while(p->next!=NULL)

{

q=p->next;

if(q->data==i)

break;

p=p->next;

j++;

}

if(p->next==NULL)

{

printf("找不到你要删除的元素\n");

return;

}

else

{

s=p->next;

p->next=s->next;

free(s);

printf("在位置%d成功删除%d\n",j,i);

}

}

node *lianjie(node *L1,node *L2)

{

node *p1, *p2;

p1=L1;

p2=p1->next;

while(p2->next!=NULL)

{

p2=p2->next;

}//P指向链表L1的最后一个节点

p2->next=L2->next;//把表二的第一个节点加到表一之后,然后释放表二 return p1;

}

void hebing (node *L)//清除新链表中相同的元素

{

node *s,*t,*r;

s=L->next;

while(s)

{

t=s;

r=s->next;

while(t->next)

{

if(s->data==r->data)

{

t->next=r->next;

r=t->next;

}

else

{

t=t->next;

r=r->next;

}

}

s=s->next;

}

}

void print(node *h)

{

printf("\n链表中的元素为") ; node *s;

s=h->next;

if(s!=NULL)

{

while(s!=NULL)

{

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

相关文档
最新文档