- 线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面的概念,不能混淆。
- 线性表的顺序存储称为顺序表。它是一组地址连续的存储单元。这使得逻辑上相邻的两个元素在物理位置上也相邻。
- 线性表的顺序存储类型描述为:
静态分配:
#define MaxSize 50 //定义线性表的最大长度
typedef struct
{
ElemType data[MaxSize];//顺序表的元素
int length; //顺序表的当前长度
}SqList;
动态分配:
#define InitSize 100 //表长度的初始定义
typedef struct
{
ElemType *data; //指示动态分配数组的指针
int MaxSize,length;//数组的最大容量和当前个数
}SeqList;
初始的动态分配语句为:
L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
顺序表最主要的特点是可以进行随机访问特性,即通过首地址和元素序号可以在O(1)的时间内找到指定的元素,缺点是插入和删除需要移动大量元素。
#include <stdio.h>
#define MaxSize 100
typedef struct
{
int data[MaxSize];
int length;
}SqList;
bool ListInsert(SqList &L,int i,int e)
{
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)
{
L.data[j]=L.data[j-1];
}
L.data[i]=e;
L.length++;
return true;
}
bool ListDelete(SqList &L,int i,int e)
{
if(i<1||i>L.length)
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)
{
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
int LocateElem(SqList &L,int e)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.data[i]==e)
{
return i+1;
}
}
return 0;
}
注意:
顺序表的顺序存储结构是一种随机存取的存储结构;