定义:具有相同数据类型的n(n≥0)个数据元素的有限序列,n为表长,n=0时为空表。
基本操作:
Initlist(&L):初始化表。
DestroyList(&L):销毁操作
ListInsert(&L,i,e):插入操作。
ListDelete(&L,i,&e):删除操作。
LocateElem(L,e):按值查找。
GetELem(L,i):按位查找。
等等。
对数据的操作:创建、销毁、增删改查等。
顺序表:用顺序存储的方式实现线性表。
静态分配:
#include <stdio.h>
#include<iostream>
using namespace std;
#define MaxSize 10 //定义最大长度
typedef struct{
int data[MaxSize];//静态数组存放数据元素
int length; //顺序表的当前长度
}
SqList; //初始化顺序表
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++){
L.data[i] = 0;//默认初始值
}
L.length = 0;//初始长度
}
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1){
cout<<"插入位置错误";
return false;
}
if(L.length>=MaxSize){
cout<<"存储空间已满";
return false;
}
for(int j=L.length;j>=i;j--){
L.data[j] = L.data[j-1];
}
L.data[i-1]=e;
L.length++;
cout<<"成功在第"<<i<<"个位置上插入值为"<<e<<"的元素"<<endl;
return true;
}
bool ListDelete(SqList &L,int i,int &e){
if(i<1||i>L.length){
cout<<"删除位置错误";
return false;
}
e=L.data[i-1];
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
}
L.length--;
cout<<"已删除第"<<i<<"个元素,该元素值为"<<e<<endl;
return true;
}
int GetElem(SqList L,int i){//按位查找
if(i<1||i>L.length){
cout<<"查找位置错误"<<endl;
}
cout<<"第"<<i<<"个元素是"<<L.data[i-1]<<endl;
return 1;
}
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
cout<<"与"<<e<<"相同的元素的位序是:"<<i+1<<endl;
return 1;
}
}
cout<<"未发现与"<<e<<"相同的元素"<<endl;
return -1;
}
int main(){
int e ;
SqList L;
InitList(L);
ListInsert(L,1,1);
ListInsert(L,2,2);
ListInsert(L,3,3);
ListInsert(L,4,4);
ListInsert(L,5,5);
ListInsert(L,6,6);
ListInsert(L,7,7);
ListInsert(L,8,8);
ListInsert(L,9,9);
ListDelete(L,9,e);
GetElem(L,1);
LocateElem(L,5);
LocateElem(L,9);
return 0;
}
动态分配:
#include<stdlib.h>
#define InitSize 10 //定义最大长度
typedef struct{
int *data;//动态分配数组的指针
int length; //顺序表的当前长度
int MaxSize; //最大容量
}SqList;
void InitList(SqList &L){
//用molloc申请连续存储空间
L.data=(int *)malloc(InitSize*sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
}
void IncreaseSize(SqList &L, int len){
int *p = L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize=L.MaxSize+len;
free(p);
}
int main(){
SqList L;
InitList(L);
return 0;
}
顺序表的特点:
随机访问:在O(1)时间内找到第i个元素
存储密度高
扩展容量不方便
插入删除元素不方便