基本概念
线性表是一种基本的存储结构(数据在计算机中的存储表示)。
分为顺序表和链表,顺序表作为顺序存储结构(俺数组顺序依次存放在一组地址连续的存储单元内),其内部结点都有且仅有一个前趋和一个后继。借助元素在存储器中的相对未知来表示数据元素之间的逻辑关系。
在C语言的描述中,一组连续的数组空间--->数组
#define MAXSIZE 100 //数组最大下标
typedef struct{
ElemType a[MAXSIZE+1];
int n; //n用来标记元素个数
}sqlist; //sqlist为线性表类型
常见的操作
1.在I处插入新元素
- 入口判断:存储容量够吗(n<MAXSIZE)?插入位置正确么?(i>=1&&i<=n+1)
- i位后面的元素后移
- 在线性表的i处插入新元素
- 表长度加一
if(L.n=MAXSIZE)
error("溢出")
if(i<1||i>n+1)
error("位置错")
for(j=n;j>=1;j++)
L.a[j+1]=L.a[j];
L.a[i]=x;
n++;
算法分析:元素插入位置和元素移动位置油管,所以无序表最好在表尾插入。
2.有序插入算法
算法要求:在递增有序的表中将X插入到适当位置。
用循环从后向前比较X和列表元素的大小,比X大的后移。
int j=L.n
while(j>=1&&x<a[j]){
a[j+1]=a[j];
j--;
}
L.a[j+1]=x
3.顺序表的删除
问题:删除表中第i个元素
方法:元素i+1后的元素前移
void sq-del(sqlist&L.int i,ElemType x){
//删除线性表的第I个元素
for(int j=i+1;j<=L.n;j++){
a[j-1]=a[j];
L.n--;}}
问题2:删除第i个元素开始的k个元素
void del(sqlist&L,int i,int k){
if(k>0 && i>0 && (i+k)=L.n){
for(int j=i+k;j<L.n;++j){
L.a[j-k]=L.a[j];
L.n--;}
}
}
有问题多谢指正。