实现顺序表的各种基本运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实现顺序表的各种基本运算
一、实验目的
了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。
二、实验内容
编写一个程序,实现顺序表的各种基本运算:
1、初始化顺序表;
2、顺序表的插入;
3、顺序表的输出;
4、求顺序表的长度
5、判断顺序表是否为空;
6、输出顺序表的第i位置的个元素;
7、在顺序表中查找一个给定元素在表中的位置;
8、顺序表的删除;9、释放顺序表
三、算法思想与算法描述简图
四、实验步骤与算法实现
#include<>
#include<>
#define MaxSize 50
typedef char ElemType;
typedef struct
{ElemType data[MaxSize];
int length;
}SqList;//顺序表类型的定义
void InitList(SqList*&L)//初始化顺序表L
{L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList*&L)//释放顺序表L
{free(L);
}
int ListEmpty(SqList*L)//判断顺序表L是否为空集{return(L->length==0);
}
int Listlength(SqList*L)//返回顺序表L的元素个数{return(L->length);
}
void DispList(SqList*L)//输出顺序表L
{int i;
if(ListEmpty(L))return;
for(i=0;i
printf("%c",L->data[i]);
printf("\n");
}
int GetElem(SqList*L,int i,ElemType e)/*获取顺序表L中的第i个元素*/
{if(i<1||i>L->length)//查找是否有这个i,若没有返回0
return 0;
e=L->data[i-1];
return 1;
}
int LocateEmpty(SqList*L,ElemType e)/*在顺序表L中查找元素e*/
{int i=0;
while (i
i++;
if(i>=L->length)
return 0;
else
return i+1;
}
int ListInsert(SqList*&L,int i,ElemType e)/*在顺序表中第i个位置上插入元素e*/ {int j;
if(i<1||i>L->length+1)
return 0;
i--;//将顺序表位序转化为data下标
for(j=L->length;j>i;j--)//将data[i]及后面元素后移一个位置
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;//顺序表度增1
return 1;
}
int ListDelete(SqList*&L,int i,ElemType e)/*在顺序表L中删除第i个元素*/
{int j;
if(i<1||i>L->length)
return 0;
i--;//将顺序表位序转化为data下标
e=L->data[i];
for(j=i;j
L->data[j]=L->data[j+1];
L->length--;
return 1;
}
void main()
{SqList*L;
ElemType e;
printf("(1)初始化顺序表L\n");
InitList(L);//初始化
printf("(2)依次采用尾插法插入7,9,12,13,14,15,18\n"); ListInsert(L,1,'7');
ListInsert(L,2,'9');
ListInsert(L,3,'12');
ListInsert(L,4,'13');
ListInsert(L,5,'14');
ListInsert(L,6,'15');
ListInsert(L,7,'18');
printf("(3)输出顺序表L:");
DispList(L);
printf("(4)顺序表L长度=%d\n",Listlength(L));
printf("(5)顺序表L为%s\n",(Listlength(L)?"空":"非空")); GetElem(L,3,12);
printf("(6)顺序表第3个元素=%d\n",12);
printf("(7)元素a的位置=%d\n",LocateEmpty(L,'a'));
printf("(8)在第4个数位置上插入8元素\n");
ListInsert(L,4,'8');
printf("(9)输出顺序表L:");
DispList(L);
printf("(10)删除L的第3个元素\n");
ListDelete(L,3,e);
printf("(11)输出顺序表L:");
DispList(L);
printf("(12)释放顺序表L\n");
DestroyList(L);
}
五、实验测试及结果
六、思考题
按由表头至表尾和表尾至表头的次序输入数据元素,则顺序表建立的程序设计有何区别?
解答:若是按表头至表尾次序输入,则存放的元素与顺序表中位置一一对应,而表尾至表头输入则相反。输出时,也相反!