数据结构实验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