实现顺序表的各种基本运算
一、实验目的
了解顺序表的结构特点及有关概念,掌握顺序表的各种基本操作算法思想及其实现。
二、实验内容
编写一个程序,实现顺序表的各种基本运算:
1、初始化顺序表;
2 、顺序表的插入;
3、顺序表的输出;
4 、求顺序表的长度
5 、判断顺序表是否为空;
6 、输出顺序表的第i位置的个元素;
7 、在顺序表中查找一个给定元素在表中的位置;
8、顺序表的删除;
9 、释放顺序表
三、算法思想与算法描述简图
主函数main
四、实验步骤与算法实现
#in clude
#in clude
{ElemType data[MaxSize]; in t le ngth;
void In itList(SqList*&L)〃
初始化顺序表 L
{L=(SqList*)malloc(sizeof(SqList)); L->le ngth=0;
for(i=0;i
}
void
DestroyList(SqList*&L)〃 {free(L); }
int ListEmpty(SqList*L)〃 {retur n( L->le ngth==O); }
int Listle ngth(SqList*L)〃 {return(L->le ngth); }
void DispList(SqList*L)〃 {int i;
释放顺序表
L
prin tf("\n");
}
int GetElem(SqList*L,int i,ElemType e)/* 获取顺序表L 中的第i 个元素*/
return 0;
e=L->data[i-1];
return 1;
}
int LocateEmpty(SqList*L,ElemType e)/* {int
i=0;
while (i
i++;
if(i>=L->le ngth)
return 0;
else
return i+1;
}
int ListInsert(SqList*&L,int i,ElemType e)/* 在顺序表中第i 个位置上插入元素e*/ {int j;
if(i<1||i>L->le ngth+1)
return 0;
L->data[j]=L->data[j-1];
L->data[i]=e;
return 1;
} Array
int ListDelete(SqList*&L,int i,ElemType e)/* {int j;
if(i<1||i>L->le ngth)
return 0;
i--;〃将顺序表位序转化为data下标
e=L_>data[i];
for(j=i;j
L->data[j]=L->data[j+1];
L->le ngth--;
return 1;
}
void mai n()
{SqList*L;
ElemType e;
prin tf("(1) 初始化顺序表L\n");
In itList(L);// 初始化
prin tf("(2) 依次采用尾插法插入7,9,12,13,14,15,18\n"); ListI nsert(L,1,'7');
ListI nsert(L,2,'9');
ListI nsert(L,3,'12');
ListI nsert(L,4,'13');
ListI nsert(L,5,'14');
ListI nsert(L,6,'15');
ListI nsert(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");
Listl nsert(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);
}
五、实验测试及结果
六、思考题
按由表头至表尾和表尾至表头的次序输入数据元素,则顺序表建
立的程序设计有何区别?
解答:若是按表头至表尾次序输入,则存放的元素与顺序表中位置一一对应,而表尾至表头输入则相反。输出时,也相反!