顺序表及其基本应用
顺序表的优点是可以更好的查找元素, 下面进行了初始化、增、删、改、查、删除等基本实现
- 结构体及其部分定义
#include <stdio.h>
#define ERROR 0
#define OK 1
#define Overflow 2 //表示上溢
#define Underflow 3 //表示下溢
#define NotPresent 4 //表示元素不存在
#define Duplicate 5 //表示有重复元素
typedef int Status;
//结构体
typedef struct seqList
{
int n; //长度
int maxLength;
int *element; //可以是自己想要的数据类型,这里我就用int了
}SeqList;
- 顺序表初始化
Status Init(SeqList *L, int mSize)
{
L->maxLength = mSize;
L->n = 0;
L->element = (int *)malloc(sizeof(int)*mSize); //动态生成一维空间
if (!L->element)
return ERROR;
return OK;
}
- 顺序表查找
Status Find(SeqList L, int i, int *x)
{
if (i < 0 || i >L.n - 1)
return ERROR; //判断是否越界
*x = L.element[i]; //通过取出值,通过x传递回去
return OK;
}
- 顺序表的元素插入
Status Insert(SeqList *L, int i, int x)
{
int j;
if (i < -1 || i > L->n - 1)
return ERROR;
if (L->n == L->maxLength)
return ERROR;
for (j = L->n - 1; j > i; j--)
L->element[j + 1] = L->element[j];
L->element[i + 1] = x;
L->n = L->n + 1;
return OK;
}
- 顺序表元素删除
Status Delete(SeqList *L, int i)
{
int j;
if (i < 0 || i > L->n - 1)
return ERROR;
if (!L->n) //判断是否为空
return ERROR;
for (j = i + 1; j < L->n; j++)
L->element[j - 1] = L->element[j];
L -> n--;
return OK;
}
//输出顺序表
Status Output(SeqList *L)
{
int i;
if (!L->n)
return ERROR;
for (i = 0; i < L->n; i++)
printf("%d ", L->element[i]);
printf("\n");
return OK;
}
- 删除顺序表
void Destory(SeqList *L)
{
L->n = 0;
L->maxLength = 0;
free(L->element);
}
- 小小demo验证一下
int main()
{
int i;
SeqList list;
Init(&list, 10);
for (i = 0; i < 10; i++)
Insert(&list, i - 1, i);
Output(&list);
Delete(&list, 0);
Output(&list);
Destory(&list);
return 0;
}
源代码
#include <stdio.h>
#define ERROR 0
#define OK 1
#define Overflow 2 //表示上溢
#define Underflow 3 //表示下溢
#define NotPresent 4 //表示元素不存在
#define Duplicate 5 //表示有重复元素
typedef int Status;
//结构体
typedef struct seqList
{
int n; //长度
int maxLength;
int *element; //可以是自己想要的数据类型,这里我就用int了
}SeqList;
//顺序表初始化
Status Init(SeqList *L, int mSize)
{
L->maxLength = mSize;
L->n = 0;
L->element = (int *)malloc(sizeof(int)*mSize); //动态生成一维空间
if (!L->element)
return ERROR;
return OK;
}
//顺序表查找
Status Find(SeqList L, int i, int *x)
{
if (i < 0 || i >L.n - 1)
return ERROR; //判断是否越界
*x = L.element[i]; //通过取出值,通过x传递回去
return OK;
}
//顺序表的元素插入
Status Insert(SeqList *L, int i, int x)
{
int j;
if (i < -1 || i > L->n - 1)
return ERROR;
if (L->n == L->maxLength)
return ERROR;
for (j = L->n - 1; j > i; j--)
L->element[j + 1] = L->element[j];
L->element[i + 1] = x;
L->n = L->n + 1;
return OK;
}
//顺序表元素删除
Status Delete(SeqList *L, int i)
{
int j;
if (i < 0 || i > L->n - 1)
return ERROR;
if (!L->n) //判断是否为空
return ERROR;
for (j = i + 1; j < L->n; j++)
L->element[j - 1] = L->element[j];
L -> n--;
return OK;
}
//输出顺序表
Status Output(SeqList *L)
{
int i;
if (!L->n)
return ERROR;
for (i = 0; i < L->n; i++)
printf("%d ", L->element[i]);
printf("\n");
return OK;
}
//删除顺序表
void Destory(SeqList *L)
{
L->n = 0;
L->maxLength = 0;
free(L->element);
}
int main()
{
int i;
SeqList list;
Init(&list, 10);
for (i = 0; i < 10; i++)
Insert(&list, i - 1, i);
Output(&list);
Delete(&list, 0);
Output(&list);
Destory(&list);
return 0;
}