6-6带头结点的链式表操作集

题目描述

实现带头结点的链式表操作集,也就是对带头结点的链表进行增删改查。

题目地址为:https://pintia.cn/problem-sets/15/problems/729

List结构定义

1
2
3
4
5
6
7
typedef struct LNode *PtrToLNode;
struct LNode {
ElementType Data;
PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;

创建空表

要求

创建并返回一个空的线性表,就是弄一个头结点

具体代码

1
2
3
4
5
6
List MakeEmpty() {
List L = (List)malloc(sizeof(struct LNode));
L->Data = 0;
L->Next = NULL;
return L;
}

查询元素

要求

返回线性表中X的位置。若找不到则返回ERROR

具体代码

1
2
3
4
5
6
7
8
9
Position Find( List L, ElementType X ) {
while(L->Next) {
if(L->Next->Data == X) {
return L->Next;
}
L = L->Next;
}
return ERROR;
}

插入元素

要求

将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false

还是那句话,不要移动先判断

具体代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool Insert( List L, ElementType X, Position P ) {
List node = (List)malloc(sizeof(struct LNode));
node->Data = X;
node->Next = NULL;
while(L) {
if (L->Next == P) {
node->Next = L->Next;
L->Next = node;
return true;
}
L = L->Next;
}
printf("Wrong Position for Insertion\n");
return false;
}

删除元素

要求

将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。

具体代码

1
2
3
4
5
6
7
8
9
10
11
bool Delete( List L, Position P ) {
while(L->Next) {
if(L->Next == P) {
L->Next = L->Next->Next;
return true;
}
L = L->Next;
}
printf("Wrong Position for Deletion\n");
return false;
}