其实多数操作跟静态分配链表差不多
#include<cstdio>
#include<cstdlib>
using namespace std;
#define InitSize 100
typedef struct{
int *data;
int length;
int MaxSize;
} SeqList;
bool InitList(SeqList &seqlist);//初始化线性表:构造一个空的线性表
int Length(SeqList &seqlist);//求表长:返回线性表中元素的个数
int LocateElem(SeqList &seqlist, int elem);//按值查找:在线性表中查找指定元素并返回该元素的下标;若查找不到,返回"-5"
int GetElem(SeqList &seqlist, int iter);//按址查找:返回线性表中下标为iter的元素
bool ListInsert(SeqList &seqlist, int iter,int elem); //插入操作:将elem插入到线性表的下标为iter的位置
bool ListDelete(SeqList &seqlist, int iter, int &elem);//删除操作:删除表中iter位置上的元素,并用elem返回
void PrintList(SeqList &seqlist);//输出操作:按前后顺序输出线性表中的所有元素
void DestoryList(SeqList &seqlist);//销毁操作:销毁线性表,释放线性表占用的内存空间
bool Empty(SeqList &seqlist);//判空操作:若为空表,返回true,否则返回false
bool InitList(SeqList &seqlist)
{
//C++风格
seqlist.data = new int[InitSize];
//C风格,需包含头文件cstdlib,或stdlib.h
//seqlist.data = (int *)malloc(InitSize * sizeof(int));
if(!seqlist.data)//判断是否成功分配内存,很关键
return false;
seqlist.length = 0;
seqlist.MaxSize = InitSize;
return true;
}
int Length(SeqList &seqlist)
{
return seqlist.length;
}
int LocateElem(SeqList &seqlist, int elem)
{
int len = seqlist.length;
for (int i = 0; i < len;i++)
if(seqlist.data[i]==elem)
return i;
return -5;//返回"-5"(意为“无”)
}
int GetElem(SeqList &seqlist, int iter)
{
if(iter<0||iter>seqlist.length-1)
return -32767;//这里用-32767表示下标越界,不知道是否严谨
return seqlist.data[iter];
}
bool ListInsert(SeqList &seqlist, int iter,int elem)
{
if (iter < 0 || iter > seqlist.length - 1 || seqlist.length + 1 > InitSize)
return false;
if(seqlist.data[iter]!=0)//这里我用0初始化线性表,所以0代表该位置没有元素,可以直接插入elem
{
for (int i = seqlist.length; i > iter;i--)
seqlist.data[i] = seqlist.data[i - 1];
}
seqlist.data[iter]=elem;
seqlist.length++;
return true;
}
bool ListDelete(SeqList &seqlist, int iter, int &elem)
{
if (iter < 0 || iter > seqlist.length - 1)
return false;
elem = seqlist.data[iter];
int len = seqlist.length;
for (int i = iter; i < len; i++)
seqlist.data[i] = seqlist.data[i + 1];
seqlist.length--;
return true;
}
void PrintList(SeqList &seqlist)
{
int len = seqlist.length;
for (int i = 0; i < len;i++)
printf("%d ", seqlist.data[i]);
}
void DestoryList(SeqList &seqlist)
{
free(seqlist.data);
seqlist.length = 0;
}
bool Empty(SeqList &seqlist)
{
if (seqlist.length == 0)
return false;
return true;
}
int main()
{
SeqList seqlist;
InitList(seqlist);
seqlist.length = 10;
for (int i = 0; i < 10; i++)
seqlist.data[i] = i * i;
for (int i = 0; i < 10; i++)
printf("%d ",seqlist.data[i]);
getchar();
}