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