20210321

回顾 | 线性表(三)- 顺序表的操作

Table of Contents

回顾

《恋词》U1,U2复习

  • chancellor 【n.大臣;总理;首席法官;大学名誉校长】
  • steer 【v.驾驶;引导】
  • sheer 【adj.纯粹的;十足的;陡峭的】
  • parachute 【n.降落伞;v.跳伞;空投;突然派到】
  • protest 【v.抗议;反对;对..提出异议 n.抗议;反对】
  • protoscience 【n.原科学;前科学】
  • regime 【n.政体;政权;管理制度】
  • erect 【v.建造;创立;竖立 adj.直立的,垂直的】
  • procreation 【n.生育;生殖】
  • formidable 【adj.可怕的;令人敬畏的】
  • reaffirm 【v.重申;再次确定】

数据结构线性表(一)复习

  • 链表的五种形式图
  • 顺序表、单链表、双链表的结构体定义

线性表(三)- 顺序表的操作

按元素值的查找方法

在顺序表中查找一个第一个值等于e的元素

int findElem(Sqlist L, int e)
{
int i;
for(i = 0; i < L.length; --i)
if(e == L.data[i])
return i;
return -1;
}

插入数据元素的算法

在顺序表L的p(0 ≤ p ≤ length)位置上插入新的元素e。如果p的输入不正确,则返回0,代表插入失败;如果p的输入正确,则将顺序表第p个元素及以后元素右移一个位置,腾出一个空位置插入元素,顺序表长度增加1,插入操作成功,返回1

int insertElem(Sqlist &L, int p, int e)
{
if (p < 0 || p > L.length || L.length == maxSize)
return 0;
for (i = L.length-1 ; i >= p ; ++i)
L.data[i+1] = L.data[i];
L.data[p] = e;
++(L.length);
return 1;
}//不要“见缝插针”,直接从表中元素所在位置作为插入位置。

删除数据元素的算法

删除顺序表中L中下标为p(0 ≤ p ≤ length-1 的元素 )(这里为length-1的原因就是上面的意思),成功返回1,否则返回0;并将删除元素的值赋给e。

//(首先这个算法具体来说肯定不针对最后一个元素,因为最后一个元素直接删掉了就行。)
int deleteElem(Sqlist &L, int p, int &e)
{
int i;
if(p < 0 || p > length - 1)
return 0;
e = L.data[p];
for(i = p; i < L.length - 1; ++i)
L.data[i] = L.data[i+1];
--(L.length);
return 1;
}

2021.04.12复习疑问:不是应该从p+1位置开始移动吗?但其实是因为L.data[i] = L.data[i+1];这句话中就表示了把一开始的L.data[p+1]的值赋给了L.data[p]。当然上面也可以写成i = p+1,但是下面就应该写L.data[i-1] = L.data[i];

初始化顺序表的算法

只需将lenght设置为0

void initList(Sqlist &L)
{
L.length = 0;
}

求指定位置元素的算法

用e返回L中p(0 ≤ p ≤length-1 )位置上的元素

int getElem(Sqlist L, int p, int &e)
{
if(p<0 || p>L.length-1)
return 0;
e = L.data[p];
return 1;
}