用于数据结构中顺序表
一.定义
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SeqList;
Seqlist L;
二. 初始化
int SeqLnit(Seqlist &L)
{
L.length=0;//顺序表长度为0
return 1;
}
三.插入 在第i个位置插入一个值x使长为n的线性表变为长为n+1的线性表
为了完成这个算法我们需要将第i至n共(n-i+1)个元素向后移动
步骤
1.查看当前表是否已满(健壮性)
2.输入是否有效 (插入位置是否有效)
3.插入元素,依次后移
4.长度+1
void int SeqLInsert(SeqList &L,int i,ElemType x)
{
if(L.length==MAXSIZE) return error;
if(i<1||i>L.lengeh+1) return error;
for (int j=L.length-1;j>=i-1;j--)
L.data[j+1]=L.data[j];
L.data[i-1]=x;
L.length++;
}
四.删除 线性表的删除是指将第i个元素删除使长度为你的线性表变为长度为n-1的线性表
需要将第i+1至n共(n-i)个元素前移
步骤
1.检查被删除元素的有效性
2.依次移动元素
3.长度减1
void int SeqLInsert(SeqList &L,int i)
{
if(i<1||i>L.lengeh+1) return error;
for (int j=i;j<=L.length-1;j++)
L.data[j-1]=L.data[j];
L.length--;
}
五.按值查找(顺序找)
int SeqLInsert(SeqList L,ElemType x)
{
int i=1;
while (i<=L.length&&L.data[i-1]!=x)
{
i++;
}
if(i<=L.length) return i;
else return 0;
}
六.两个有序顺序表的合并
void union(SeqList &LA,SeqList&LB)
{
int m,n,j,k;
m=LA.length;
n=LB.length;
k=m+n-1;//k表示结果线性表的工作指针(下标)
i=m-1;j=n-1;//i,j分别为线性表LA和LB的工作指针(下标)
while (i>=0&&j>=0)
{
if(LA.data[i]>=LB.data[j]) LA.data[k--]=LA.data[i--];
else LA.data[k--]=LB.data[j--];
}
while (j>=0) LA.data[k--]=LB.data[j--];
LA.length=m+n;
}
七.顺序表的逆置
void Seqinvert (SeqList &A)
{
int i,j;ElemType t;
for(i =0;j=L.length-1;i<j;i++,j--)
{
t=L.data[i];
L.data[i]=L.data[j];
L.data[j]=t;
}
}