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;
}