线性表主要有顺序存储结构和链式存储结构,这节主要讲顺序存储结构
线性表的顺序存储结构的主要操作包括插入、删除和查询等。
本文先介绍基本的操作:
1.创建线性表顺序存储结构
void CreateSequence(int *sequence, int len)
{
cout << "请依次输入数值" << endl;
cout <<"共" << len << "个";
int value;
for(int count = 0; count < len; count++ )
{
cin >> value;
sequence[count] = value;
}
}
2. .打印线性表顺序存储结构,即依次输出线性表元素
void PrintElement(int *sequence, int len)
{
for(int count = 0; count < len; count++)
cout << sequence[count] << endl;
}
3.线性表顺序存储结构的查询
int FindElement(int *sequence, int len, int x)//返回该元素所在线性表中位置
{
for(int count = 0; count < len; count++ )
{
if(sequence[count] == x)
return count+1; //元素以0开始计数,所以返回值要加1
else if(count == len)
return -1;
}
}
基本原理:查找需要删除的元素,返回该元素所在的位置,从该位置处将所有元素依次向前移动一位
int DeleteElement(int *sequence, int x, int &len)
{
int Loc, count = 0;
while(sequence[count] != x && count < len )
count++;
if(count == len)
return -1; //即未找到该元素
else
{
Loc = count;
for(; count < len; count ++)
sequence[count] = sequence[count + 1];
len = len - 1; //长度用指针的原因是指针可以直接修改参数,不用将长度作为返回值返回
}
return (Loc);
}
基本原理:首先判断插入的位置i是否合理(即是否超过数组长度或者为负数)
在合理的情况下,从最后一位开始依次向后移动一位,直到i位(包括i位)
最后将元素插入i位置处
int InsertElement(int *sequence, int &len, int i, int x )
{
if(i > len || i < 0)//判断插入位置是否合法
{
cout << "插入位置不合法" << endl;
return -1;
}
if(i == len)
sequence[len-1] = x;
else
{ //第i个位置被插入,在程序中即第i-1个位置被插入
for(int count = len-1; count >= i-1; count--)//=指的是i-1这个位置也要被移走
{
sequence[count+1] = sequence[count];
}
sequence[i-1] = x;
}
len = len + 1; //长度用指针的原因是指针可以直接修改参数,不用将长度作为返回值返回
return 1;
}
#include <iostream>
using namespace std;
//创建顺序表
void CreateSequence(int *sequence, int len)
{
cout << "请依次输入数值" << endl;
cout <<"共" << len << "个";
int value;
for(int count = 0; count < len; count++ )
{
cin >> value;
sequence[count] = value;
}
}
//顺序表的查询工作
int FindElement(int *sequence, int len, int x)//返回该元素所在线性表中位置
{
for(int count = 0; count < len; count++ )
{
if(sequence[count] == x)
return count+1; //元素以0开始计数,所以返回值要加1
else if(count == len)
return -1;
}
}
//顺序表的插入操作
int InsertElement(int *sequence, int &len, int i, int x )
{
if(i > len || i < 0)//判断插入位置是否合法
{
cout << "插入位置不合法" << endl;
return -1;
}
if(i == len)
sequence[len-1] = x;
else
{ //第i个位置被插入,在程序中即第i-1个位置被插入
for(int count = len-1; count >= i-1; count--)//=指的是i-1这个位置也要被移走
{
sequence[count+1] = sequence[count];
}
sequence[i-1] = x;
}
len = len + 1; //长度用指针的原因是指针可以直接修改参数,不用将长度作为返回值返回
return 1;
}
//顺序表的删除操作
int DeleteElement(int *sequence, int x, int &len)
{
int Loc, count = 0;
while(sequence[count] != x && count < len )
count++;
if(count == len)
return -1; //即未找到该元素
else
{
Loc = count;
for(; count < len; count ++)
sequence[count] = sequence[count + 1];
len = len - 1; //长度用指针的原因是指针可以直接修改参数,不用将长度作为返回值返回
}
return (Loc);
}
void PrintElement(int *sequence, int len)
{
for(int count = 0; count < len; count++)
cout << sequence[count] << endl;
}
int main()
{
int len = 6;
int sequence[6] = {1,2,3,4,5,6};
//int sequence[len];
int *seq = &sequence[0];
//CreateSequence(seq, len);
//PrintElement(seq, len);
InsertElement(seq, len, 3, 9 );
PrintElement(seq, len);
//DeleteElement(seq, 3, len);
//PrintElement(seq, len);
system("pause");
return 0;
}