以下代码是用c++实现的顺序表的各种基本运算
顺序表的定义:
#define MAX_SIZE 10
typedef int ElemType;
//定义顺序表
typedef struct seqlist {
ElemType data[MAX_SIZE];//存放在顺序表的元素
int length;//顺序表的长度
}seqlist;
顺序表的初始化:
//初始化顺序表
void InitList(seqlist* &L) {
//给顺序表分配空间
L = (seqlist*)malloc(sizeof(seqlist));
//将顺序表长度置为0
L->length = 0;
}
建立顺序表:
易错:在L前面一定要加&,要不然无法在外面引用建立好的顺序表
//建立顺序表
void CreateList(seqlist * &L, ElemType a[], int n) {
int i = 0,k=0;
//分配存放顺序表的空间
L = (seqlist*)malloc(sizeof(seqlist));
//扫描a[]数组的元素,将其存放在L中
while(i < n) {
L->data[k] = a[i];
k++;
i++;
}
L->length = k;//设置L的长度
}
打印顺序表的元素
//打印顺序表的元素
void PrintList(seqlist* L) {
int i = 0;
while (i<L->length)
{
printf("%d,", L->data[i]);
i++;
}
}
在顺序表中查找值为e的元素的下标(0,1,2,3.....)
//在顺序表中查找值为e的元素的下标(0,1,2,3.....)
//法一
int GetLocate(seqlist* L, ElemType e) {
int i = 0;
//遍历顺序表元素
for (i = 0; i < L->length; i++) {
if (L->data[i] == e) {
return i;
}
}
}
//法二
int GetLocate1(seqlist* L, ElemType e) {
int i = 0;
while (i<L->length&&L->data[i]!=e)
{
i++;
}
if (i >= L->length) {
//没找到
return 0;
}
else {
//找到了,返回逻辑上的下标
return i + 1;
}
}
在顺序表第i位插入元素e(1,2,3,4....)
void InsertElem(seqlist* &L, int i, ElemType e) {
//判断i是否合法
if (i<1 || i>L->length + 1 || L->length == MAX_SIZE) {
return;
}
else {
//找到原顺序表第i位的位置,
//从最后一个元素开始,往后移动一位
int j = 0;
for (j = L->length - 1; j >= i - 1; j--) {
L->data[j + 1] = L->data[j];
}
//将元素e赋值给第i位置
L->data[i - 1] = e;
L->length++;
}
}
删除顺序表中第i个位置的元素(1,2,3,4....),并返回该元素的值
int DeleteLocateElem(seqlist* &L, int i) {
//判断i的合法性
if (i<1 || i>L->length) {
return;
}
//从第i-1位之后往前移动一位
int j = 0;
int re = L->data[i - 1];
for (j = i-1; j < L->length-1; j++) {
L->data[j] = L->data[j+1];
}
L->length--;
return re;
}
删除顺序表中元素值为e的元素,并返回该元素的下标(0,1,2,3,4.....)
//删除顺序表中元素值为e的元素,并返回该元素的下标(0,1,2,3,4.....)
int DeleteElem(seqlist* &L, ElemType e) {
//此处调用之前写的查找元素e的方法
int locate=GetLocate(L, e);
//从第locate位之后往前移动一位
int j = 0;
for (j = locate ; j < L->length-1; j++) {
L->data[j] = L->data[j+1];
}
L->length--;
return locate;
}
销毁顺序表,求顺序表的长度
//销毁顺序表
void DestroyList(seqlist* &L) {
free(L);
}
//求顺序表的长度
int ListLen(seqlist* L) {
return L->length;
}
测试代码:
int main() {
//数组a
int a[] = { 1,2,3,4,5,6 };
seqlist *L;
//初始化顺序表
//InitList(L);
//建立顺序表
CreateList(L, a, 6);
int result = 0;
//测试求顺序表长度的方法
//result = ListLen(&L);
//测试查找
//result = GetLocate(L, 3);
//测试添加
//InsertElem(L, 2, 0);
// 测试删除
//DeleteElem(L, 4);
//result=DeleteLocateElem(L, 2);
//测试打印顺序表元素的方法
//PrintList(L);
//测试销毁顺序表的方法
DestroyList(L);
return 0;
}