人人范文网 范文大全

实验一线性表的创建与访问算法设计

发布时间:2020-03-02 22:48:37 来源:范文大全 收藏本文 下载本文 手机版

内蒙古工业大学信息工程学院

四、编译程序:

#include #include #define MAXSIZE 100

typedef char ElemType; typedef struct LNode

//定义单链表结点类型 {

ElemType data;

struct LNode *next; }LinkList;

LinkList *CreatlinkR(LinkList *L)

//用尾插法建立带头结点的单链表 {

LinkList *s, *r; char ch; r = (LinkList *)malloc(sizeof(LinkList));

//创建头结点

L = r; s = r; r->next = NULL; printf(\"单链表元素值为单个字符, 连续输入,$为结束字符:\"); while ((ch = getchar()) != \'$\') {

r = (LinkList *)malloc(sizeof(LinkList));

//创建新结点

r->data = ch;

r->next = NULL;

s->next = r;

s = r;

} r->next=NULL;

//终端结点

return (L); }

void Sort(LinkList *h)

//单链表元素排序 { LinkList *p=h->next,*q,*t;

if(p!=NULL) {

t=p->next;

p->next=NULL;

p=t;

while(p!=NULL)

{

t=p->next;

q=h;

第 页

内蒙古工业大学信息工程学院

while(q->next!=NULL&&q->next->datadata)

q=q->next;

//在有序表中找插入*p的前驱结点*q

p->next=q->next;

//将*p插到*q之后

q->next=p;

p=t;

} } }

void DispList(LinkList *L)

//输出单链表L {

LinkList *p=L->next;

while(p!=NULL) {

printf(\"%c \",p->data);

p=p->next; } }

LinkList *Union(LinkList *La,LinkList *Lb,LinkList *Lc)

{ LinkList *pa=La->next,*pb=Lb->next,*s,*tc;

Lc=(LinkList *)malloc(sizeof(LinkList));

tc=Lc; while(pa!=NULL&&pb!=NULL) {

if(pa->datadata)

{

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

s->data=pa->data;

tc->next=s;

tc=s;

pa=pa->next;

}

else if(pa->data>pb->data)

{

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

s->data=pb->data;

tc->next=s;

tc=s;

pb=pb->next;

}

else

{

//求两有序集合的并集 //复制结点

内蒙古工业大学信息工程学院

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

s->data=pa->data;

tc->next=s;

tc=s;

pa=pa->next;

//重复元素只复制一个

pb=pb->next;

} } if(pb!=NULL)

//复制余下结点

pa=pb; while(pa!=NULL) {

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

s->data=pa->data;

tc->next=s;

tc=s;

pa=pa->next;

} tc->next=NULL; return(Lc); }

LinkList *InsterSect(LinkList *La,LinkList *Lb,LinkList *Lc)

//求两有序集合的交集 {

LinkList *pa=La->next,*pb,*s,*tc;

Lc=(LinkList *)malloc(sizeof(LinkList));

tc=Lc;

while(pa!=NULL) {

pb=Lb->next;

while(pb!=NULL&&pb->datadata)

pb=pb->next;

if(pb!=NULL&&pb->data==pa->data)

//若pa结点值在pb中

{

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

s->data=pa->data;

tc->next=s;

tc=s;

}

pa=pa->next; }

tc->next=NULL; return(Lc);

内蒙古工业大学信息工程学院

}

LinkList *Subs(LinkList *La,LinkList *Lb,LinkList *Lc)

//求两有序集合的差集 {

LinkList *pa=La->next,*pb,*s,*tc;

Lc=(LinkList *)malloc(sizeof(LinkList));

tc=Lc;

while(pa!=NULL) {

pb=Lb->next;

while(pb!=NULL&&pb->datadata)

pb=pb->next;

if(!(pb!=NULL&&pb->data==pa->data))

{

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

s->data=pa->data;

tc->next=s;

tc=s;

}

pa=pa->next; } tc->next=NULL; return(Lc); }

void main() {

LinkList *La,*Lb,*Lc;

int num=0,loop,j; loop=1; La=CreatlinkR(La); Lb=CreatlinkR(Lb); Sort(La); Sort(Lb);

printf(\"有序集合A={ \");

DispList(La);

printf(\"}\\n\");

printf(\"有序集合B={ \");

DispList(Lb); printf(\"}\\n\"); while(loop) {

printf(\"请选择您要执行的操作:1.求并集

scanf(\"%d\",&j);printf(\"\\n%d\",j);

//若pa结点值不在pb中 2.求交集

3.求差集\\n\");

内蒙古工业大学信息工程学院

if(j>=1&&j

switch(j)

{

case 1: Lc=Union(La,La,Lc);

printf(\"集合A与集合B的并集C={ \");

DispList(Lc);

printf(\"}\\n\");

break;

case 2: Lc=InsterSect(La,Lb,Lc);

printf(\"集合A与集合B的交集C={ \");

DispList(Lc);

printf(\"}\\n\");

break;

case 3: Lc=Subs(La,Lb,Lc);

printf(\"集合A与集合B的差集C={ \");

DispList(Lc);

printf(\"}\\n\");

break;

} printf(\"0.结束

1.继续\\n\"); scanf(\"%d\",&loop); printf(\"\\n\"); } }

五、运行结果:

1.输入两个无序集合,排序后输出:

内蒙古工业大学信息工程学院

2.求集合的并集:

3.选1继续:

内蒙古工业大学信息工程学院

4.求集合的交集:

5.求集合的差集:

内蒙古工业大学信息工程学院

6.选0结束:

二叉树的创建与访问算法设计

实验总结报告线性表

《算法分析与设计》实验指导书

算法与数据结构实验

算法设计与分析 实验指导书1

《算法设计综合实验》教案

算法与数据结构实验指导书

算法与数据结构实验册

实验1 线性表应用多项式计算

8专题一《算法》教学设计

实验一线性表的创建与访问算法设计
《实验一线性表的创建与访问算法设计.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档