数据结构课程设计-单链表的插入、删除、查找等
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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={
基本操作:
Creates( &L )
操作结果:构建一个空的线性表L。
Insertsl( &L , k ,i)
初始条件:线性表L已存在。
操作结果:在带有头结点单链表的第k个元素之前插入元素i。
Deletesl( &L , i, j )
初始条件:线性表L已存在。
操作结果:删除指定位置j元素i。
Hebing( &L )
初始条件:线性表L已存在。
操作结果:清除新链表中相同的元素。
}ADT List
四、算法流程图
五、算法源代码
#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) ;