线性表的顺序存储结构,插入、删除和定位运算
先来总结一下今天的笔记吧。
对了,其实以后想要再想把xdf文件转换成doc的话,可以直接复制相关问题在网上就可以查了,不用再去想办法转换
1.线性表的6种基本运算:
答:
初始化InitList(L)、求表长LengthList(L)、取值GetElem(L,i)、查找LocateElem(L,i,e)、插入InsertList(L,i,e)、删除DeleteList(L,i,e)。
2.写出顺序表的初始化、插入、删除算法。
(1)顺序表的初始化InitList(SqList &L)
Status InitList(SqList &L){
L = new Node; //或L = (SqList)malloc(sizeof(SqList)) 分配存储空间
L.length = 0;
}
(2)顺序表的求长度LengthList(SqList L)
int LengthList(SqList L){
return L.Length; //直接返回线性表的长度
}
(3)顺序表的取值GetElme(SqList L,int i,&e)
Status GetElme(SqList L,int i,&e){ //在表L中取第i个元素的值,用e返回其值
//
if(i<1 || i>L.length) return error; //判断取值位置是否合法
e = L.elem[i-1]; //直接用e返回第i个位置上元素的值(其地址为i-1)
//取值时间复杂度为O(1)
}
(4)顺序表的查找LocateElem(SqList L,int i)
int LocateElem(SqList L,int i){ //返回表L中第i个元素位置的序号,失败则返回0;
for(i=0;i<L.length;i++){ //从地址为0的元素开始一直往后找
if(L.elem[i]==e) //若第i个元素的值=e
return i+1; //则返回元素的地址+1 为元素的序号
else
return 0; //失败返回0
}
}
(5)顺序表的插入 InsertList(L,i,e)
Status InsertList(SqList L,int i,ElemType e){ //在表L中第i个元素位置上插入元素e
int j; //定义需要移动的元素的位置
if(i<i || i>L.length+1) return error //判断插入位置是否正确
if(L.length == MaxSize) return error //判断插入位置是否已满
for(j=L.lenth-1;j>=i-1;j--){ //从第n-1至第i个位置依次向后移动一位
//也就是如果表长大于等于要插入的元素i-1的范围,就允许插入
L.elem[i-1] = e; //将e插入到第i个位置的绝对地址上
L.elem[j+1] = L.elem[j]; //插入位置之后的元素依次向后移动一位
L.length++; //表长加1
return ok;
}
}
//插入算法的时间复杂度为O(n),在第i个元素上插入需要移动的元素个数为n-i+1,平均需要移动的元素个(n-i+1)/2。
(6)顺序表的删除
Status DeleteList(SqList L,int i,ElemType &e){ //删除表L第i个元素的值,其值用e保存
int j;
if(i<i || i>L.length) return error //判断删除位置是否正确
*e = L.elem[i-1]; //用e保存被删元素的值
for(j=i-1;j<=L.length-1;j++){ //从被删元素i+1至n的元素依次向前移动1位
//也就是如果要删除的元素i-1小于等于表长,则允许删除
L.elem[j-1] = L.elem[j]; //插入位置之后的元素依次向前移动一位
L.length--; //表长减1
return ok;
}
}
//删除算法的时间复杂度为O(n),在第i个元素上删除需要移动的元素个数为n-i,平均需要移动的元素个(n-i)/2。
1.今天得抓紧时间写点笔记了,绝不能拖到明天再做了,因为今天在家里学得太少了;
2.上午只回顾了昨天单链表的逆置算法,插入删除,以及在找办法把xdf文件转换成pdf再转换成doc文件,忙了那么久,后面才发现转换成的文档只能以图片的形式呈现,连复制都不能;
3.下午只做了《第二章线性表习题集》一套题不到,只做了前面30几套填空题和后面20套选择题,甚至都还没来得及总结,就到晚上了。
4.果真是疲惫了,都没有想继续做下笔记的想法了,算了,留到明天早上再来回顾今天的笔记吧。