编写线性表定义及基本操作函数
例如:建立具有5个元素的顺序表。
L=(a,b,c,d,f)
并完成如下操作:
(1)输出线性表
(2)求线性表L的长度
(3)获取第3个元素的值
(4)获取元素 a 在线性表中的位置
(5)在第4个元素前,插入元素g
(6)删除第5个元素的值
#include <malloc.h>
#include <stdio.h>
#define MaxSize 50
using namespace std;
typedef char ElemType;
定义类型
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
线性表的创建
void CreateList(SqList *&L, ElemType a[], int n)//a中n个元素建立顺序表
{
int i = 0, k = 0;//k表示L中的元素个数,初始值为0
L = (SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
while (i < n)//i扫描数组a的元素
{
L->data[k] = a[i];
k++; i++;
}
L->length = k;//设置L的长度k
}
初始化线性表
void InitList(SqList *&L)
{
L = (SqList *)malloc(sizeof(SqList));//分配存放线性表的空间
L->length = 0;//置空线性表的长度为0
}
线性表的销毁
void DestroyList(SqList *&L)
{
free(L);//释放线性表L
}
判断线性表是否为空,如果为空则返回true,否则返回false
int ListEmpty(SqList *L)
{
return(L->length == 0);
}
输出线性表中的各个元素
void DispList(SqList *L)
{
int i;
if (ListEmpty(L)) return;//判断是否为空表
for (i = 0; i < L->length; i++)
printf("%c “, L->data[i]);//依次输出线性表中的元素
printf(”\n");
}
求线性表中的某个元素值
int GetElem(SqList *L, int i, ElemType &e)
{
if (i<1 || i>L->length)
return 0;//参数i不满足条件即i不在线性表的范围内时返回0
e = L->data[i - 1];//取出元素值
return 1;
}
顺序查找第一个值域与e逻辑等的元素
int LocateElem(SqList *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
int ListInsert(SqList *&L, int i, ElemType e)
{
int j;
if (i<1 || i>L->length + 1)//如果i不在线性表范围内返回0
return 0;
i–;//逻辑序号转化为物理序号
for (j = L->length; j > i; j–)
L->data[j] = L->data[j - 1];
L->data[i] = e;
L->length++;
return 1;
}
删除线性表的第i个元素
int ListDelete(SqList *&L, int i, ElemType &e)
{
int j;
if (i<1 || i>L->length)
return 0;
i–;
e = L->data[i];
for (j = i; j < L->length - 1; j++)
L->data[j] = L->data[j + 1];
L->length–;
return 1;
}
求线性表的长度,即返回length域的值
int ListLength(SqList *&L)
{
return L->length;
}
在main函数调用
int main()
{
SqList *L;
ElemType e;
InitList(L);
ListInsert(L, 1, ‘a’);
ListInsert(L, 2, ‘b’);
ListInsert(L, 3, ‘c’);
ListInsert(L, 4, ‘d’);
ListInsert(L, 5, ‘f’);
printf("新建线性表元素如下:\n");
DispList(L);
printf("线性表长度:%d\n", ListLength(L));
GetElem(L, 3, e);
printf("取到的第三个元素是:e=%c\n", e);
printf("LocateElem(L,'a')=%d\n", LocateElem(L, 'a'));
ListInsert(L, 4, 'g');
DispList(L);
ListDelete(L, 3, e);
DispList(L);
DestroyList(L);
return 0;
}
线性表的基本操作函数并不难理解,这是完整代码,可以提供理解的一个思路吧。代码后也有相关注释的。