线性表的顺序存储指的是
用一组地址连续的存储单元
依次存储线性表的基本元素。
#include<stdio.h>
#include<malloc.h>
#define ListSize 10
typedef struct SqList{
int *elem; //线性表存储空间基址
int length;
int listsize;
}SqList;
bool InitList(SqList &L)
{
L.elem=(int *)malloc(ListSize*sizeof(int));
/* L.elem=new int[ListSize]; */ //都是以数组形式存储元素
if(!L.elem) return false;
else{
L.length=0;
L.listsize=ListSize;
return true;
}
}
int GetLength(SqList L) //得到表长
{
return L.length;
}
void GetElem(SqList L,int i,int &elem) //得到第i个元素
{
elem=L.elem[i-1];
}
int LocateElem(SqList L,int elem) //判断是否有elem的值相同元素并返回元素序号
{
for(int i=0;i<L.length;i++)
{
if(L.elem[i-1]==elem)
{
return i;
break;
}
}
return 0;
}
bool InsertList1(SqList &L,int i,int elem) //插入第i个元素前即L.elem[i-1]前
{
if(i<1||i>L.length+1) return false; //当i=length+1时即原有最后的元素后一个
if(L.length>=L.listsize)
{
int *newbase;
newbase=(int *)realloc(L.elem,(L.listsize+ListSize)*sizeof(int));//表满满时length=listsize
if(!newbase) return false;
L.elem=newbase;
}
for(int j=L.length;j>i;j--) L.elem[j]=L.elem[j-1]; //移动i个元素
L.elem[i-1]=elem;
L.length++;
return true;
}
bool InsertList2(SqList &L,int i,int elem) //插入第i个元素后即L.elem[i-1]后
{
if(i<1||i>L.length) return false; //当i=length+1时即原有最后的元素后一个
if(L.length>=L.listsize)
{
int *newbase;
newbase=(int *)realloc(L.elem,(L.listsize+ListSize)*sizeof(int));//表满满时length=listsize
if(!newbase) return false;
L.elem=newbase;
}
for(int j=L.length;j>=i;j--) L.elem[j]=L.elem[j-1]; //移动i-1个元素
L.elem[i]=elem;
L.length++;
return true;
}
bool DeleteList(SqList &L,int i,int &elem) //删除第i个元素并将值赋予elem
{
if(i<1||i>L.length) return false;
elem=L.elem[i-1];
for(int j=i;j<L.length;j++) L.elem[j-1]=L.elem[j];
L.length--;
return true;
}
void ListTraverse(SqList L) //表的遍历
{
for(int i=0;i<L.length;i++)
{
printf("%i ",L.elem[i]);
}
printf("\n");
}
int main()
{
int temp=0;
SqList A;
InitList(A);
InsertList1(A,1,3);
InsertList1(A,2,6);
InsertList2(A,2,2);
InsertList2(A,3,3);
printf("表A长度:");
printf("%i\n",GetLength(A));
printf("表A:");
ListTraverse(A);
printf("删除元素为:");
DeleteList(A,1,temp);
printf("%i\n",temp);
printf("表A:");
ListTraverse(A);
return 0;
}