6-2顺序表操作集
题目描述
实现顺序表的操作集,也就是对顺序表进行增删改查。
回忆一下什么叫做顺序表?是线性表的一种,但是是顺序存储的方式,和数组非常接近。
在处理的时候可以看作数组来处理。需要注意的是这里面所有元素都是"紧挨"着的。
题目地址为:https://pintia.cn/problem-sets/15/problems/725
List结构定义 1
2
3
4
5
6typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
创建一个新表
要求
创建并返回一个空的线性表。
显然需要使用到malloc函数来创建一个新空间。
LNode其实就是整个顺序表了,虽然不知道他为什么要这么来命名。第一次写代码的时候就因为这个弄错了。
具体代码
1 |
|
查询元素
要求
返回线性表中X的位置。若找不到则返回ERROR。
没办法的啊,顺序表就只有上BF了,又不是排序完的数组可以用二分。
具体代码
1 |
|
插入元素
要求
将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false。
首先对判满的判断那就是Last和MAXSIZE的比较,也就是Last + 1 == MAXSIZE就满了。
其次对非法位置的判断,大于 Last + 1 或者 小于 0 的都属于非法位置
最后再来实现插入操作
从插入位置开始,所有元素向后移动一位
插入位置替换为新元素
!!!这道题最打脑壳的就是你必须要先判满再判非法位置,否则过不了测试
具体代码
1 |
|
删除元素
要求
将位置P的元素删除并返回true。若参数P指向非法位置,则打印“POSITION P EMPTY”(其中P是参数值)并返回false。
判非法位置就是 P > Last || P < 0
删除操作就是把后面的向前覆盖,然后修改Last的值就可以让最后一个元素不需要处理。
具体代码
1 |
|