//说白了线性表就和数组的存储是类似的。开辟内存中连续的存储空间即物理结构保持连续,逻辑上当然也是保持相连的。
// 那么对于线性表的操作,我觉得实际用处中不是太大,因为关键是用起来不是太方便的,对于程序员来说,需要在开始分配好
固定的空间,这个空间可能大,可能小,这样会对内存的使用率得不到保证。最后很难达到高效。//
// 对于线性表的使用,后面的stack and queue 也会用到这样的存储类型。
// 在以后的介绍中会有相应的体现。
#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAXSIZE 100
// 设置数组的数值
void SetValue(int a[],int n)
{
cout << "请输入" << n << "个数字:" << endl;
for (int i = 0;i < n;++ i)
{
cin >> a[i];
}
}
// 在第i个位置上插入一个元素item;
void InsertArray(int a[],int& n,int i,int item)
{
if (n == MAXSIZE || i < 1|| i > n)
{
cout << "表满或者插入的位置不正确!" << endl;
}
else
{
for (int j = n - 1;j < i;j --)
{
a[j] = a[j - 1];
}
a[i - 1] = item;
n ++;
}
}
// 删除线性表第i个位置上的数据元素;
void DeleteList(int a[],int& n,int i)
{
if (i < 1 || i > n)
{
cout << "要删除的元素不存在!" << endl;
}
else
{
for (int j = i;j < n;j ++)
{
a[j - 1] = a[j];
}
n --;
}
}
// 确定元素item在线性表中的位置;
int LocalList(int a[],int& n,int item)
{
for (int i = 0;i < n;++ i)
{
if (a[i] == item)
{
return i ++;
}
}
return -1;
}
//删除表中重复出现的数据元素
void DeleteReList(int a[],int& n)
{
for (int i = 0;i < n;++ i)
{
for (int j = i;j < n;++ j)
{
if (a[i] == a[j])
{
DeleteList(a,n,j);
}
}
}
}
// 对线性表中元素进行排序;
void SelectSort(int a[],int& n)
{
int iLocal = 0;
int iTemp = 0;
for (int i = 0;i < n;++ i)
{
iLocal = i;
for (int j = i + 1;j < n;++ j)
{
if (a[j] < a[iLocal])
{
iLocal = j;
}
}
if (iLocal != i)
{
iTemp = a[iLocal];
a[iLocal] = a[i];
a[i] = iTemp;
}
}
}
int main(int argc,char* argv[])
{
int iArr[MAXSIZE];
int iNum = 0;
cout << "请设置数组的长度:"<< endl;
cin >> iNum;
SetValue(iArr,iNum);
return 0;
}
线性表存储的优缺点:
优点:
1.简单呀,直观,容易理解。
2.易于计算呀,知道第一个数据的存储位置,就可以通过一个简单的解析式计算出其他数据的位置。
3.可以随机存取表中的任意一个数据元素,存取速度快,并且存取任意一个数据元素的时间代价相同。
4.最终的一点是:空间的开销较小。相对于链式结构而言,不用开辟指针域。
缺点:
1.需要一片连续的存储单元。
2.使用不方便呀,比如说我前期开辟小了,后期需要改大点,但是呢,不能动态更改,很难操作的。
3.时间复杂度较大了,进行插入或者删除时,需要事先对插入或者删除位置后面的数据进行移动,表长的时候,则更难实现了。
说说实用场合吧,线性表比较适用于长度不经常发生变化或者只需要在顺序存储的设备上做批处理的场合。