//数组的形式表示顺序表
#include<iostream>
using namespace std;
//建立非空的顺序表(长度为len,整型)
void CreateSequence(int *sequence,int len)
{
int value;
for(int count=0;count<len;count++) //count用来计数
{
cin>>value; //输入数据
sequence[count]=value;
}
}
//顺序表的查找(找到顺序表中x的位置)
int FindElement(int *squence,int len,int x)
{
int count=0;
while(sequence[count]!=x&&count<len)
count++;
if(count==len)
return -1;
else
return count+1; //数组下标从-1开始,返回值时需要+1;
}
//顺序表的插入操作(在第i位置插入x)
int InsertElement(int *sequence,int x,int i,int *len) /* *len*/
{
int count;
if(i>*len||i<0) //判断插入位置是否合法
return -1;
if(i==*len) //插入到最后一个元素
sequence[i]=x;
else
{
for(count=*len-1;count>=i;--count) //移动过程是从后往前进行的 /*--count */
sequence[count+1]=sequence[count];
sequence[i]=x;
}
*len=*len+1;
return 1;
}
//顺序表的删除操作(删除值为x的元素)
int DeleteElement(int *quence,int x,int *len)
{
int Loc,count=0;
while(sequece[count]!=x&&count<*len)
count++;
if(count==*len) //未找到
return -1;
else
{
Loc=count; //找到它记录数组下标
for(count=Loc;count<*len;count++) //从第i+1个结点开始依次移动数据
squence[count]=sequence[count+1];
*len=*len-1;
}
return Loc+1;
}
//将两个顺序表a,b合并成c,a和b为升序排列,要求c也为升序排列
int MergeOrder(int *a,int *b,int *c,int lena,int lenb)
{
int i=0,j=0;
while(i<lena&&j<lenb) //同时扫描a,b表
{
if(a[i]<b[i])
c[i]=a[i]
else
c[i]=b[i];
i++,j++;
}
if(i==lena) //a表先扫描完
{
for(j=lena;j<lenb;j++)
c[j]=b[j]; //b表剩余的元素接到c的末尾
return(lenb)
}
if(j==lenb)
{
for(i=lenb;i<lena;i++)
c[i]=a[i]; //将a表剩余的元素接到c的末尾
return lena;
}
}
线性表的顺式储存结构与实现
最新推荐文章于 2020-11-01 14:38:38 发布