数据结构作业

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

《数据结构》课程设计报告

2014-2015学年第一学期

课程设计题目:

设计学生姓名:

所在系部名称:计算机工程系

所在班级名称:计算机科学2013()

参加设计时间:

课程设计课时: 30

指导教师姓名:

年月日

第一题目:

假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。现要求一个新的集合C=A∪B。

算法思想:

先初始化线性表LC,将LA的所有元素复制到LC中,然后扫描线性表LB,若LB的当前元素不在线性表LA中,则将其插入到LC中。

Void unionList(List LA, ListB, list &LC)

{

int Lena, Lenc, i;

Elem Type e;

Init List (LC);

for (i=1;i<=ListLength (LA);i++) /*将LA的所有元素插入到LA中*/

{

GetLElem(LA,i,e);

ListInsert(LC,i,e,);

}

Lena=ListLength(LA);/*求线性表的长度*/

Lenb=ListLength(LB);

For(i=1,i<=Lenb;i++)

{

GetElem(LB,i,e);/*取LB中第i个数据元素赋给e*/

If(!LocateElem(LA),e));

ListInsert(LC,++Lena,e);/*C中不存在和e相同者,则插入到LA中*/

}

}

第二题目:

有顺序表LA和LB,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表LC,要求LC的元素也是按从小到大的升序排列。

算法思想:

依次扫描顺序表A和BD的元素,比较当前元素的值,将较小值的元素赋给C,重复,直到一个线性表扫描完毕,然后将未完的那个顺序表中余下部分赋给C。顺序表C的容量要能够容纳A、B两个顺序表相加的长度。

#include

#include

#define DataType int

#define MAXSIZE 100

typedef struct

{

DataType data[MAXSIZE];

int last;

}seqlist;

seqlist *Init_seqlist()

{

seqlist *L;

L=(seqlist*)malloc(sizeof(seqlist));

if(L){

L->last=-1;

return L;

}

}

void merge(seqlist A,seqlist B,seqlist *C) {

int i,j,k;

i=0;

j=0;

k=0;

while(i<=st&&j<=st)

if(A.data[i]

{

C->data[k]=A.data[i];

k++;

i++;

}

else

{

C->data[k]=B.data[j];

k++;

j++;

}

while(i<=st)

{

C->data[k]=A.data[i];

k++;

i++;

}

while(j<=st)

{

C->data[k]=B.data[j];

k++;

j++;

}

C->last=k-1;

}

void main()

{

seqlist A,B,*C;

int r;

int i,j,k;

printf("请输入线性表A的长度:");

scanf("%d",&r);

st = r-1;

printf("请输入线性表A的各元素值:\n");

for(i=0; i<=st; i++)

{

scanf("%d",&A.data[i]);

}

printf("\n请输出线性表A的各元素值:\n"); for(j=0;j<=st;j++)

printf("%6d",A.data[j]);

printf("\n请输入线性表B的长度:");

scanf("%d",&r);

st = r-1;

printf("请输入线性表B的各元素值:\n");

for(i=0; i<=st; i++)

{

scanf("%d",&B.data[i]);

}

printf("\n请输出线性表B的各元素值:\n"); for(j=0;j<=st;j++)

printf("%6d",B.data[j]);

C=Init_seqlist();

merge(A,B,C);

printf("\n合并后线性表C的各元素值:\n"); for(k=0;k<=C->last;k++)

{

printf("%6d",C->data[k]);

}

printf("\n");

相关文档
最新文档