此顺序表是以数组下标为1开始放入元素的。。。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <stdlib.h>
using namespace std;
typedef int ElemType;
#define LIST_INIT_SIZE 5 //线性表储存空间的初始分配量
#define LISTINCREMENT 1 //线性表存储空间的分配增量
struct SqList
{
ElemType *elem;
int length;
int listsize;
};
void init(SqList &L) //初始化
{
L.elem=NULL;
}
bool Is_Exist(SqList &L) //顺序表是否存在
{
if(L.elem==NULL)
return false;
else
return true;
}
bool Create (SqList &L) //创建一个顺序表
{
L.elem=(ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
if(L.elem==NULL)
{
printf("动态内存分配失败\n");
return false;
}
L.length=0;
L.listsize=LIST_INIT_SIZE;
return true;
}
void ClearList(SqList &L) //清空顺序表
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
L.length=0;
}
void DestroyList (SqList &L) //销毁顺序表
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
free(L.elem);
L.length=0;
}
bool ListEmpty(SqList &L) //判断顺序表是否为空
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
if(L.length==0)
return true;
else
return false;
}
int ListLength(SqList &L) //顺序表的长度
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
return L.length;
}
bool GetElem (SqList &L,int loc,ElemType &e) //顺序表中某个位置元素的值
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
if(L.length<loc||loc<=0)
{
printf("查找超出顺序表范围\n");
return false;
}
e=L.elem[loc];
return true;
}
void ListTraverse (SqList &L) //顺序表遍历
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
for (int i=1;i<=L.length;i++)
printf("%d%c",L.elem[i],i==L.length?'\n':' ');
}
bool ListInsert (SqList &L,int loc,ElemType data) //插入元素
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
if(loc>L.length+1||loc<=0)
{
printf("插入位置超出顺序表范围\n");
return false;
}
if(L.length+1>=L.listsize)
{
ElemType* newbase;
newbase=(ElemType*)realloc(L.elem,sizeof(ElemType)*(L.listsize+LISTINCREMENT));
if(newbase==NULL)
{
printf("追加内存失败\n");
exit(OVERFLOW);
}
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
for (int i=L.length+1;i>=loc;i--)
L.elem[i]=L.elem[i-1];
L.elem[loc]=data;
L.length++;
return true;
}
bool ListDelete(SqList &L,int loc,int &e) //删除指定位置元素
{
if(!Is_Exist(L))
{
printf("顺序表不存在,程序终止\n");
exit(OVERFLOW);
}
if(ListEmpty(L))
{
printf("顺序表为空,不可删除元素\n");
return false;
}
if(loc>L.length||loc<=0)
{
printf("删除位置超出顺序表范围\n");
return false;
}
e=L.elem[loc];
for (int i=loc;i<L.length;i++)
L.elem[i]=L.elem[i+1];
L.length--;
return true;
}
int main()
{
SqList L;
init(L);
Create(L);
return 0;
}