顺序表是一段连续的空间,就相当于数组
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 20
#define OK 1
#define ERROR -1
typedef int Status;
typedef int ElemType;
定义顺序线性表的结构体
typedef struct SQ
{
ElemType *Elem_array;
int length;//线性表的元素个数
}SqList;
顺序线性表初始化
Status Init_SqList(SqList *L)
{
L->Elem_array=(ElemType *)malloc(MAX_SIZE * sizeof(ElemType)) ;//给线性表申请空间
if(!L->Elem_array)
return ERROR;
else
{
L->length = 0;//把元素个数置为零
return OK;
}
}
插入数据
Status Insert_SqList(SqList *L, int i, ElemType e)
{ //i是插入数据的位置 e是要插入的数据
int j;
if(i <= 0 || i > L->length)//判断i是否在线性表的长度内
return ERROR;
if(L->length + 1 >= MAX_SIZE)//线性表已满
{
printf("overflow\n");
return ERROR;
}
for(j = L->length; j > i -1; j--)从第i为开始 每个元素向后移一位
{
L->Elem_array[j + 1] = L->Elem_array[j];
}
L->Elem_array[i] = e;//把待插入的值赋给第i位
L->length++;//线性表的元素个数加一
return OK;
}
删除数据
Status Delete_SqList(SqList *L, int i)//i为待删除的位置
{
int j;
if(i <= 0 || i > L->length - 1)//判断带删除的元素是否存在
return ERROR;
for(j = i; j < L->length; j++)
{
L->Elem_array[j - 1] = L->Elem_array[j];//把i位以后的元素都向前移一位
}
L->length--;//元素个数减一
return OK;
}
查询第i位的元素
void Query_SqlList2(SqList *L, int i)
{
if((i <= 0) || (i > L->length))
{
printf("overflow\n");
}
else
{
printf("第%d位为%d\n", i, L->Elem_array[i-1]);
}
}
输出线性表
void Print(SqList *L)
{
int i;
for(i = 0; i < L->length; i++)
{
printf("%d\n",L->Elem_array[i]);
}
}
连接两个有序的线性表 连接后仍然有序
void Link_SqlList(SqList *L, SqList *M, SqList *K)
{ //L 和 M连接成K
int i = 0;
int j = 0;
ElemType *p;
ElemType *q;
ElemType *r;
p = L->Elem_array;
q = M->Elem_array;
r = K->Elem_array;
//两个线性表都存有元素
while((i < (L->length)) && (j < (M->length)))
{
if(*p < *q)
{
*r = *p;
p++;
i++;
K->length++;
r++;
}
else if(*p > *q)
{
*r = *q;
q++;
j++;
K->length++;
r++;
}
else
{
*r = *q;
q++;
j++;
K->length++;
r++;
*r = *p;
p++;
i++;
K->length++;
r++;
}
}
//只有一个线性表还存有元素 把剩下的元素直接连接到K后面
if( i == (L->length - 1))
{
while(j < (M->length - 1))
{
*r = *q;
j++;
K->length++;
r++;
}
}
else
{
while(i < (L->length - 1))
{
*r = *p;
i++;
K->length++;
r++;
}
}
}
以上就是线性表的基本操作,剩下的就是在调用了