数据结构课程报告1

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

1 对给定的单链表L,设计一个算法,删除L中值为x的结点的直接前驱结点。

#include "stdio.h"

typedef struct Node{

Datetype data;

struct Node *next;

}node;

int Del(int x,node *first)

{//first为单链表头指针,返回值1表示操作成功,0表示失败

node *p,*q,*r;

p=first;

q=NULL;

r=NULL;

if(!p||p->data==x)return 0;

while(p){

r=q;

q=p;

p=p->next;

if(p->data==x&&r){r->next=p;break;}

}

if(!p)return 0;

else return 1;

}

2 已知单链表中各结点的元素值为整型并且有序,设计算法删除链表中所有大于且小于的元素,并释放被删除结点的存储空间。

int Delete(Linklist,int mink,int maxk)

{

Node *p,*q;

p=L;

while(p->next!=NULL)

p=p->next;

if(mink>=maxk||L->next->data>=maxk||mink+1=maxk)

{

printf("参数不合法!");

return ERROR;

}

else

{

while(p->next->data<=mink)

p=p->next;

q=p->next;

while(q->data

{

p->next=q->next;

free(q);

q=p->next;

}

return OK;

}

}

3 已知两个单链表LA和LB分别表示两个集合,其元素递增排列,设计算法求出LA和LB 的交集C,要求C同样以元素递增的单链表形式存储。

void merge(SepList *LA,SepList *LB,SepList *LC)

{

Node *p1,*p2,*q1,*q2;

LA->next=p1;

LB->next=q1;

while(p1!=NULL&&q1!=NULL)

if(p1->data>q1->data)

{

p2=p1->next;

p1->next=LC->next;

LC->next=p1;

p1=p2;

}

else

{

q2=q1->next;

q1->next=LC->next;

LC->next=q;

q1=q2;

}

}

相关文档
最新文档