-------顺序表介绍-------
线性表的顺序存储又称顺序表; 用一组地址连续的存储单元(数组)依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。一维数组可以静态分配,也可以动态分配。关于静态分配,数组的大小空间事先固定,空间占满,加入新数据就会溢出。动态分配,存储空间通过执行程序中的动态分配存储语句实现,一旦数据空间占满,就另外开辟一块更大的存储空间,用来替换原来的存储空间,从而达到扩充存储的目的。
特点: 增删操作需移动大量数据元素; 支持随机存取。
-----------定义----------
【静态分配】
#define MaxSize 100 //线性表最大长度
typedf struct SqList{
Elemtype data[MaxSize]; //数据域
int length; //顺序表的长度
}SqList;
【动态分配】
#define InitSize 100 //表长度初始定义
typedf struct SqList{
Elemtype *data //指示动态分配数组的指针
int MaxSize,length; //数组的最大容量和长度
}SeqList;
-------基本操作-------
InitSqList(&L); //初始化
InsertList(&L,int i,ElemType e); //在位序为i的位置插入元素e
DeleteList(&L,int i,&e); //删除位序i处的数据元素,并用e记录被删的元素值
GetElement(L,i); //查找位序i处的数据元素值
LocateElement(L,e); //查找数据元素值为e所在的位置
Length(L); //顺序表长度
PrintList(L); //输出操作
--------实现---------
【静态分配】
//顺序表——静态分配
#include <stdio.h>
#define MaxSize 100
typedef struct {
int data[MaxSize];
int length;
} SqList;
bool InitSqList(SqList &L) {
for(int i=0; i<L.length; i++) {
L.data[i]=0;
}
L.length=0;
return true;
}
bool InsertList(SqList &L) {
int i;
//创建也属于插入操作这里请从位序1处开始插入
printf("请输入要插入元素的位序:\n");
scanf("%d",&i);
while(i!=9999) {
if(L.length==MaxSize) return false;
if(i<1||i>L.length+1) {
printf("待插入位置违法!!!\n\n");
return false;
}
int e;
printf("请输入要插入的元素值:\n");
scanf("%d",&e);
//插入位置的往后元素均后移
for(int j=L.length; j>=i; j--) {
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
printf("请输入要插入元素的位序:\n");
scanf("%d",&i);
}
return true;
}
bool DeleteList(SqList &L,int &e