1、头文件
#include <stdio.h>
#include <stdlib.h>
#define ListSize 100 //最大允许长度
typedef int ElemType; //元素的数据类型
typedef struct
{
ElemType *elem; //存储数组
int length; //当前表元素个数
int maxSize; //表的最大长度
} SeqList;
void Init(SeqList& l);
void Free(SeqList& l);
bool Insert(SeqList& l, ElemType x, int i);
void Print(const SeqList& l);
int find(SeqList& l, ElemType x);//查找
bool Delete(SeqList& l, ElemType &x, int i);//删除
2、子函数
#include "SeqList.h"
void Init(SeqList& l)//创建函数,申请顺序表内存,设置顺序表最大长度,当前长度
{
l.elem = new ElemType[ListSize];
if (l.elem)
{
l.maxSize = ListSize;
l.length = 0;
}
else
{
printf("init failed.");
exit(-1);
}
}
void Free(SeqList& l)//释放函数,释放顺序表占用内存
{
if (l.elem) delete[] l.elem;
l.maxSize = l.length = 0;
}
bool Insert(SeqList& l, ElemType x, int i)//插入函数,在顺序表l第i个位置插入元素x
{
int *p, *q;
if (i < 1 || (i > (l.length+1))|| l.length >= l.maxSize)
{
return false;
}
q = &(l.elem[i - 1]);
for (p = &(l.elem[l.length - 1]);p >= q;--p)
{
*(p + 1) = *p;
}
*q = x;
++l.length;
return true;
}
int find(SeqList& l, ElemType x)//查找函数,查找x元素在顺序表l中的位序
{
int i;
int *p;
p = l.elem;
for (i = 1;i < l.length;i++)
{
if (*(p++) == x)
break;
}
if (i <= l.length)
return i;
else
return 0;
}
bool Delete(SeqList& l, ElemType &x, int i)//删除函数,删除顺序表第i个元素,并返回删除元素值x
{
int *p,*q;
if (i < 1 || (i > l.length))
{
return false;
}
p = &(l.elem[i - 1]);
x = *p;
q = l.elem + l.length - 1;
for (++p;p <= q;++p)
{
*(p - 1) = *p;
}
--l.length;
return true;
}
void Print(const SeqList& l)//遍历函数,遍历整个顺序表,打印每个存在的元素
{
for (int i = 0; i < l.length; ++i)
{
printf("%d ", l.elem[i]);
}
printf("\n");
}
3、主函数
#include "SeqList.h"
void main()
{
int y;
SeqList l;
Init(l);//创建测试
printf("创建后遍历打印:");
Print(l);//遍历打印
Insert(l, 1, 1);
Insert(l, 2, 2);
Insert(l, 3, 3);
Insert(l, 4, 4);
printf("插入前遍历打印:");
Print(l);//遍历打印
Insert(l, 5, 3);//插入测试
printf("插入后遍历打印:");
Print(l);//遍历打印
printf("查找元素位序打印:");
printf("%d\n",find(l, 5));//查找测试
printf("被删除的元素打印:");
Delete(l, y, 3);//删除测试
printf("%d\n",y);//查找测试
printf("删除后遍历打印:");
Print(l);//遍历打印
Free(l);//释放测试
printf("释放后遍历打印:");
Print(l);//遍历打印
system("pause");//暂停,保留测试结果显示
}