数据结构实验2

  • 格式:doc
  • 大小:37.00 KB
  • 文档页数:8

仅供个人参考

不得用于商业用途 《数据结构》实验报告

实验序号:2 实验项目名称:顺序表的操作

学 号 姓 名 专业、班级

实验地点 指导教师 实验时间

一、实验目的及要求

1.掌握线性表的顺序存储类型;

2.熟练掌握顺序表的基本操作和具体的函数实现。

二、实验设备(环境)及要求

微型计算机;

windows 操作系统;

Microsoft Visual Studio 6.0集成开发环境。

三、实验内容与步骤

1.设A、B均为用数组实现的List类型的顺序表,试设计一个函数Alternate(A,B),从表A中第1个元素开始,交替地用表A和表B中元素组成一个新表。

2.顺序表表示和实现线性表的如下:

# define LIST_INIT_SIZE 10

# define LISTINCREMENT 5

typedef struct{

ElemType *elem;

int length ;

int ListSize;

} sqlist;

int InitList_sq(sqlist *l) /*initial the list l*/

{

l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if (!l->elem)

{

printf("无法分配空间!");

return 1;

}

else

{

l->length=0;

l->ListSize=LIST_INIT_SIZE; 仅供个人参考

不得用于商业用途 printf("ok");

return 0;

}

}

void main()

{

sqlist L;

InitList_sq(&L);

……

}

【要求】1、实现顺序表的插入、删除、按值查找等基本操作;

2、假设构建的是非递增有序顺序表,设计算法实现从该有序顺序表中删除所有其值重复的元素,使得表中所有元素的值均不同。

四、实验结果与数据处理

五、分析与讨论

通过本次实验了解了线性表的顺序存储结构。实验过程中具体函数的实现遇到了问题,但通过百度与总结前辈的经验解决了。

五、教师评语

签名:

日期: 成绩

附源程序清单:

1.

#include

#include

#define LIST_INIT_SIZE 10

#define LISTINCREMENT 5

typedef int ElemType;

typedef struct{

ElemType *elem;

int length ;

int ListSize;

} sqlist;

int InitList_sq(sqlist *l)

/*initial the list l*/

{

l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); 仅供个人参考

不得用于商业用途 if (!l->elem)

{

printf("无法分配空间!");

return 1;

}

else

{

l->length=0;

l->ListSize=LIST_INIT_SIZE;

printf("ok\n");

return 0;

}

}

void Alternate(sqlist *A,sqlist*B)

{

ElemType i;

sqlist list;

sqlist *C;

C=&list;

InitList_sq(C);

C->length=A->length+B->length;

while(i)

{

if(C->length>=C->ListSize)

{

ElemType *newbase;

newbase=(

ElemType

*)realloc(C->elem,

(C->ListSize+LISTINCREMENT)*sizeof(ElemType));

C->elem=newbase;

C->ListSize+=LISTINCREMENT;

}

else break;

}

for(i=0;ilength;i++)

{

C->elem[2*i]=A->elem[i];

C->elem[2*i+1]=B->elem[i];

}

for(i=0;ilength;i++)

printf("%d ",C->elem[i]);

}

void main() 仅供个人参考

不得用于商业用途 {

ElemType i;

sqlist list1,list2,*A,*B;

A=&list1;

B=&list2;

InitList_sq(A);

InitList_sq(B);

printf("请输入A指向的5个整数:\n");

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

scanf("%d",&A->elem[i]);

A->length=i;

printf("请输入B指向的5个整数:\n");

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

scanf("%d",&B->elem[i]);

B->length=i;

Alternate(A,B);

printf("\n");

}

2.

#include

#include

#include

#define LIST_INIT_SIZE 100

#define LISINCREMENT 10

#define ElemType int

#define Status int

typedef struct Sq{

ElemType *elem;

int length;

int listsize;

}SqList;

Status InitList(SqList *L)

{

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!L->elem)

return 0;

L->length=0;

L->listsize=LIST_INIT_SIZE;

return 1;

}

//---------------------------------------------------------插入

Status ListInsert(SqList *L,int i,ElemType e)

{

int *q,*p; 仅供个人参考

不得用于商业用途 if(i<1||i>L->length)

return 0;

if(L->length>L->listsize)

{

ElemType

*newbase=(ElemType*)realloc(L->elem,(LIST_INIT_SIZE+LISINCREMENT)*sizeof(ElemType));

if(!newbase)

return 0;

L->elem=newbase;

L->listsize+=(LISINCREMENT);

}

q=&(L->elem[i-1]);

for(p=&(L->elem[L->length-1]);p>=q;--p)

*(p+1)=*p;

*q=e;

++L->length;

return 1;

}

//---------------------------------------------------------删除

Status ListDelete(SqList *L,int i,ElemType e)

{

int *p,*q;

if(i<1||i>L->length)

return 0;

p=&(L->elem[i-1]);

e=*p;

q=L->elem+L->length-1;

for(++p;p<=q;++p)

*(p-1)=*p;

--L->length;

return 1;

}

//---------------------------------------------------------查找

Status LocateElem(SqList *L, ElemType e){

//本算法实现查找顺序表中值为e的元素,如果查找成功,返回元素位序,否则返回0

int i;

for(i=0;ilength;i++)

if(L->elem[i]==e)

{

printf("被查找元素的位置:%2d\n",i+1);

return i+1;

}// 下标为i的元素值等于e,返回其位号i+1

else