数据结构 线性表的增删查改以及顺序表的合并。
//线性表的顺序存储 **增删查改**
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define maxsize 100 //线性表可能达到的最大长度
typedef struct
{
int elem[maxsize];
int length;
}SeqList;
void Init_SeqList(SeqList *L);//顺序表的初始化,构造一个空表,length设为0
int Insert_SeqList(SeqList *L,int i,int x);//顺序表的插入
int Delete_SeqList(SeqList *L,int i,int *e);//顺序表的删除
int Location_SeqList(SeqList *L,int x);//顺序表中按值查找
void merge(SeqList *A,SeqList *B,SeqList *C); //顺序表的合并
void Init_SeqList(SeqList *L)
{
L->length = 0;
}
int Insert_SeqList(SeqList *L,int i,int x) //顺序表的插入 ,i为插入的位置,x为置入的数据
{
int j;
if(L->length==maxsize-1)
{
printf("表满!");
return OVERFLOW;//运算过程中出现了上溢,退出程序并报错给主调进程。
}
if(i<1||i>L->length+1)
{
printf("位置错!");
return false;
}
for(j=L->length;j>=i;j--) //将i的值赋给i+1,空出位置i插入新数据x。
L->elem[j+1] = L->elem[j];
L->elem[i] = x;
L->length ++;
return true;
}
int Delete_SeqList(SeqList *L,int i,int *e) //顺序表的删除 , i为待删除的元素
{
int j;
if(i<1||i>L->length) //检查空表及删除位置的合理性
{
printf("不存在第i个元素!");
return false;
}
*e = L->elem[i]; //用 指针e存储待删除的指针
for(j=i;j<L->length;j++) //将i后面的数据向前移动
L->elem[j] = L->elem[j+1];
L->length --;
return true;
}
int Location_SeqList(SeqList *L,int x) //顺序表中按值查找,x为待查找的值
{
int i = 1;
while(i<=L->length&&L->elem[i]!=x)
i++;
if(i>L->length)
return false; //查找失败,没有找到与x对应的位置
else
return i; //返回x的存储位置
}
void merge(SeqList *A,SeqList *B,SeqList *C) //顺序表的合并,
{
int i,j,k;
i = 1; j = 1; k =1;
wile(i<=A->length&&j<=B->length)
{
if(A->elem[i]>=B->elem[j])
C->elem[k++] = B->elem[j++];
else
C->elem[k++] = A->elem[i++];
}
while(i<=A->length) //此时B顺序表已经处理完,依次放入A顺序表即可。
C->elem[K++] = A->elem[i++];
while(j<=B->length)
C->elem[k++] = B->elem[j++];
C->length = A->length + B->length;
}
int main()
{