线性表的基本运算:
线性表的顺序存储结构简称:顺序表,是把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一段连续的存储空间中。即利用数组的连续存储空间顺序存放线性表的各元素。
- InitList(&L):初始化线性表,构造一个空的线性表L。
- DestroyList(&L):销毁线性表,释放线性表L占用的内 存空间。
- ListEmpty(L):判线性表是否为空表,若L为空表,则返回 真,否则返回假。
- ListLength(L):求线性表的长度,返回L中元素个数。
表长=L.length+1
元素a1至an分别存放在L.data[0]至L.data[L. length]中- DispList(L): 输出线性表,当线性表L不为空时,顺序显示 L中各结点的值域。
- GetElem(L,i,&e):求线性表L中指定位置的某个数据元素, 用e返回L中第 i(1≤i≤ListLength(L))个元素的值。
- LocateElem(L,e):定位查找,返回L中第1个值域与e相等的 位序。若这样的元素不存在,则返回值为0。
- ListInsert(&L,i,e):插入数据元素,在L的第 i(1≤i≤ListLength(L)+1)个元素之前插入新的元素e,L的长 度增1。
- ListDelete(&L,i,&e):删除数据元素,删除L的第 i(1≤i≤ListLength(L))个元素,并用e返回其值,L的长度减1。
例题1:
1.创建一个顺序表,测试样例:5,9,6,7,4,8,1,3,2
2.在已经建立的线性表的第8个位置插入一个元素x(10),测试样例:5,9,6,7,4,8,1,10,3,2。
3.删除第4个位置上的元素,并输出线性表
4.从顺序表中删除具有最小值的元素(假设值唯一),并由函数返回被删除元素的值,空出的位置由最后一个元素填补。若顺序表为空则提示错误信息信息并退出。
5.编写算法函数 Reverse( )实现将顺序表的倒置。要求算法的空间复杂度为O(1).
函数文件List.cpp:
#include "list.h"
void CreateList(SqList *&L, ElemType a[], int n)
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for (i=0; i<n; i++)
L->data[i]=a[i];
L->length=n;
}
void InitList(SqList *L)
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
//输出顺序表
void DispList(SqList *L)
{
for(int i=0;i<L->length;i++)
printf(" %d",L->data[i]);
printf("\n");
}
//判定是否为空表ListEmpty(L)
bool ListEmpty(SqList *L)
{
return(L->length==0);
}
//求线性表的长度ListLength(L)
int ListLength(SqList *L)
{
return(L->length);
}
//求某个数据元素值GetElem(L,i,e)
bool GetElem(SqList *L,int i,ElemType &e)
{
if (i<1 || i>L->length)
return false;
e=L->data[i-1];
return true;
}
//按元素值查找LocateElem(L,e)
int LocateElem(SqList *L, ElemType e)
{
int i=0