一,线性表
线性表是具有相同特征元素的一个有限序列,某个结点前后的结点称为该结点的前趋和后继。
线性表有顺序存储结构和链式存储结构。
1,顺序存储结构
特点:顺序存储结构占用一片连续的内存空间;依次存放;元素类型相同;随机存取。
下面介绍线性表顺序存储结构的相关操作
a顺序存储结构的表示
#define MAXSIZE 100
typedef struct{
int a[100];
int length;
}Sqlist;
b顺序表的取值(获取第i个位置的元素)
int GetElem(Sqlist L,int i,Elemtype &e)
if(i<1||i>L.length){
return ERROR;}
e=L.elem[i-1];
return OK;
}
当需要获取元素时,首先判断获取位置是否合理。若不合理则返回error,若合理则将下标为i-1的元素赋值给e,此时获取完成,返回ok,代码结束。
c顺序表的查找
int LocateElem(Sqlist L,ElemType e){
for(i=0;i<L.length;i++){
if(L.elem[i]==e){
return i+1;}
else{
return 0;
}}}
先利用for循环对顺序表元素进行遍历,若成功找到e则返回i+1,即逻辑位次,否则返回0,表示查找失败,代码结束。
d顺序表的插入
代码的答题思路如下,首先确定插入元素的位置,然后判断插入元素位置是否合法,再判断顺序表存储空间是否已满,若已满则返回error,然后用for循环将从第n位到第i位的元素依次向后移动一格,为新插入的元素腾出空间,然后新插入的元素放到第i个位置,最后将表长加一,插入完成,代码结束。
Status ListInsert_Sq(SqList &L,int i,ElemType e){
if(i<1||i>L.length+1) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(int j=L.length-1;j>=i-1;j--){//注意物理位次
L.length[j+1]=L.length[j];
}
L.length[i-1]=e;
L.length++;
return OK;}
e顺序表的删除
代码的大致思路与插入大致相同,首先判断删除位置是否合法,然后将想要删除的元素保留在e中,然后利用for循环将第i+1个元素到第n个元素全部向前移动一位,最后表长减一,删除成功返回OK,代码结束。
Status ListDelete_Sq(SqList &L,int i){
if(i<1||i>L.length+1) return ERROR;
e=L.elem[i-1];
for(int j=i;j<L.length-1;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return OK;
总结:顺序存储结构查找方便但是插入删除麻烦。