把线性表中的所有元素按照其逻辑顺序依次存储到从计算机存储器中指定的一块连续的存储空间中。
建立顺序表 CreateList(将给定的含有n个元素的数组的每个元素依次放入顺序表中),主要动态分配空间的使用
顺序表基本运算主要包括
1.初始化线性表 InitList(L) (分配线性表的存储空间并将length置为0)
2.销毁线性表 DestroyList(L) (释放空间,直接free(L)即可!)
3.判断是否为空 ListEmpty(L) (返回布尔型结果)
4.求长度 ListLength(L) (返回length即可)
5.输出 DispList(L) (顺序显示各元素值)
6.求某个元素值 GetElem(L,i,e) (用e返回L中第i个元素值)
7.按元素值查找 LocateElem(L,e) (查找第一个与e相等的元素的逻辑序号,不存在返回0)
8.插入数据元素 ListInster(L,i,e) (在L的第i个位置上插入新的元素e)
9.删除数据元素 ListDelete(L,i,e) (删除第i个元素,e保存该值)
代码实现:
#include
#include
#define MaxSize 50
typedef char ElemType;
typedef struct{
ElemType data[MaxSize];
int length;
}SqList;
void CreateList(SqList *&L,ElemType a[],int n)
{
int i;
//L=(SqList *)malloc(sizeof(SqList));//先进行过初始化则不需要
for(int i=0;idata[i]=a[i];
L->length=n;
}
void InitList(SqList *&L)//初始化
{
L=(SqList *)malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList *&L)//销毁
{
free(L);
}
bool ListEmpty(SqList *L)//判断是否为空
{
return(L->length==0);
}
int ListLength(SqList *L)//求长度
{
return L->length;
}
void DispList(SqList *L)//输出
{
for(int i=0;ilength;i++)
{
printf("%c",L->data[i]);
}
printf("\n");
}
bool GetElem(SqList *L,int i,ElemType &e)//求某个数据元素值,用e返回第i个元素的值
{
if(i<0||i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList *L,ElemType e)//按元素值查找,顺序查找第一个值与e相等的元素的逻辑序号,不存在则返回0
{
int i=0;
while(ilength&&L->data[i]!=e)
i++;
if(i>L->length)
return 0;
else
return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)//在L的第i个位置上插入新的元素e
{
int j;
if(i<1||i>L->length+1)
return false;
i--; //逻辑序号转换为物理序号!
for(int j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)//删除L的第i个元素
{
int j;
if(i<1||i>L->length+1)
return false;
i--;
e=L->data[i];
for(int j=i;jlength;j++)
L->data[j]=L->data[j+1];
L->length--;
return true;
}
int main()
{
SqList *L;
ElemType e='X';
InitList(L);
char a[5]={'Z','X','C','V','B'};
CreateList(L,a,5);
if(ListEmpty(L))
printf("空!\n");
else
{
printf("不空!\n");
DispList(L);
printf("当前长度为:%d\n",ListLength(L));
// ListInsert(L,1,'B');
// ListInsert(L,1,'A');
// ListInsert(L,1,'B');
ListDelete(L,1,e);//此处e保存的是被删除的元素
printf("被删除的为%c\n",e);
printf("当前长度为:%d\n",ListLength(L));
printf("输出:");
DispList(L);
}
return 0;
}