线性表作为数据结构中一种常用结构,其定义为零个或多个数据元素的有限序列。
数据元素按照存储方式的不同,线性表可以分为顺序存储和链式存储。本文章主要看看顺序存储的相关知识。
顾名思义,顺序存储是指用一段连续的存储单元依次存储线性表的数据元素。
关于顺序存储的常用操作主要有以下几点:
1、顺序存储结构的初始化;
2、元素的插入与删除;
3、顺序存储结构的元素读取;
4、列表非空判断;
5、两个线性顺序表的连接;
完整代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10 //数据项最大长度
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE]; //数据
int length; //线性表当前长度
}SqLite;
//初始化顺序线性表
int InitList(SqList *L)
{
L->length = 0;
return OK;
}
//顺序线性表非空判断
int ListEmpty(SqList L)
{
if (L.length == 0)
return TRUE;
else
return FALSE;
}
//清空顺序线性表
int ClearList(SqList *L)
{
L->length = 0;
return OK;
}
//打印顺序线性表中的某一元素
int VisitElem(ElemType e)
{
printf("%d", e);
return OK;
}
//获得顺序线性表的长度
int ListLength(SqList L)
{
return L.length;
}
//得到顺序线性表中的某个位置上的元素
int GetElem(SqList L,int p, int *e)
{
if ((L.length == 0) || (p < 1)
|| (p > L.length))
{
return ERROR;
}
*e = L.data[p-1];
return OK;
}
//返回线性表中与元素e值相同的第一个元素位置
int LocateElem(SqList L, int e)
{
int i;
if (L.length == 0)
return ERROR;
for (i = 0; i < L.length; i++)
{
if (L.data[i] == e)
{
break;
}
}
if (i >= L.length)
return ERROR;
return i+1;
}
//元素的插入
int ListInsert(SqList *L, int i, ElemType e)
{
int j;
if (L->length == MAXSIZE)
return ERROR;
if ((i < 1) || (i > L->length+1)) //当i的位置比第一个元素位置小或大于最后一个元素的下个位置时返回错误
return ERROR;
if (i <= L->length)
{
for (j = L->length -1; j >= i-1; j--) //由后往前遍历
L->data[j+1] = L->data[j]; //将要插入的位置整体往后移动
}
L->data[i-1] = e;
L->length++;
return Ok;
return ERROR;
}
//元素的删除
int ListDelete(SqList *L, int i, ElemType *e)
{
int j;
if (L->length == 0)
{
return ERROR;
}
if (i < 1 || i > L->length)
return ERROR;
*e = L->data[i-1];
if (i < L->length)
{
for (j = i; j < L->length; j++)
L->data[j-1] = L->data[j];
}
L->length--;
return OK;
}
//遍历顺序线性表
int ListTraverse(SqList L)
{
int i;
for (i = 0; i < L.length; i++)
visit(L.data[i]);
printf("\n");
return OK;
}
//将两个线性顺序表融合成新的顺序表
void UnionL(SqList *La, SqList Lb)
{
int La_len, Lb_len, i;
int e;
La_len = ListLength(*La);
Lb_len = ListLength(Lb);
for (i = 1; i < La_len; i++)
{
GetElem(Lb, i, &e);
if (!LocateElem(*La, e))
ListInsert(La, ++La_len, e); //将Lb中与La中不同的元素,插入到La中
}
}
这里不在详细书写main函数中的相关操作,大家可以按照自己的想法将上次函数进行组合,做自己想实验的功能。