带头结点的链式表操作集
2017-04-12 17:28
399 查看
本题要求实现带头结点的链式表操作集。
函数接口定义:
其中
各个操作函数的定义为:
其实有无头节点大体实现差不多,不过加入了头节点后会使得程序实现起来简单地多。我也是稍微改了下无头节点的链表操作集就可以了。
实现:
函数接口定义:
List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P );
其中
List结构定义如下:
typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;
各个操作函数的定义为:
List MakeEmpty():创建并返回一个空的线性表;
Position Find( List L, ElementType X ):返回线性表中X的位置。若找不到则返回ERROR;
bool Insert( List L, ElementType X, Position P ):将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;
bool Delete( List L, Position P ):将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。
其实有无头节点大体实现差不多,不过加入了头节点后会使得程序实现起来简单地多。我也是稍微改了下无头节点的链表操作集就可以了。
实现:
List MakeEmpty() { List L = (List)malloc(sizeof(struct LNode)); L->Next = NULL; return L; } Position Find( List L, ElementType X ) { L = L->Next; while (L != NULL) { if (L->Data == X) return L; L = L->Next; } return ERROR; } bool Insert( List L, ElementType X, Position P ) { List head = L, pre = L; L = L->Next; while (L != NULL) { if (L == P) { List tmp = (List)malloc(sizeof(struct LNode)); tmp->Data = X; tmp->Next = pre->Next; pre->Next = tmp; return true; } pre = L; L = L->Next; } if (P == NULL) { List tmp = (List)malloc(sizeof(struct LNode)); tmp->Data = X; tmp->Next = NULL; pre->Next = tmp; return true; } printf("Wrong Position for Insertion\n"); return false; } bool Delete( List L, Position P ) { List head = L, pre = L; L = L->Next; while (L != NULL) { if (L == P) { pre->Next = L->Next; free(L); return true; } pre = L; L = L->Next; } printf("Wrong Position for Deletion\n"); return false; }
相关文章推荐
- 带头结点的链式表操作集
- 带头结点的链式表操作集(浙大数据结构)
- 4-6 带头结点的链式表操作集 (20分)
- 4-6 带头结点的链式表操作集
- 带头结点的链式表操作集
- 4-6 带头结点的链式表操作集
- 6-6 带头结点的链式表操作集(20 point(s))
- PTA数据结构与算法题目集(中文)4-6 带头结点的链式表操作集 (20分)
- 将带头结点的有序单链表A和B合并成一个新的有序表C……
- C++实现带头结点单链表
- 编写算法函数linklist delallx(linklist head, int x),删除带头结点单链表head中所有值为x的结点。
- 双向循环链表的建立,插入,删除(不带头结点)
- 不带头结点的单链表插入操作隐含的错误、、
- 带头结点的链队列实现(C语言)
- 将带头结点的有序单链表A和B合并成一个新的有序表C
- 带头结点的单链表的12个基本操作
- 不带头结点的单向链表排序——插入排序(C语言)
- 带头结点的双链表
- 对一个不带头结点的单链表进行逆置
- C语言实现带头结点的链表的创建、查找、插入、删除操作