带头结点的链式表操作集
2017-10-20 10:31
387 查看
#include <stdio.h> #include <stdlib.h> #define ERROR NULL typedef enum {false, true} bool; typedef int ElementType; typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List; List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); int main() { List L; ElementType X; Position P; int N; bool flag; L = MakeEmpty(); scanf("%d", &N); while ( N-- ) { scanf("%d", &X); flag = Insert(L, X, L->Next); if ( flag==false ) printf("Wrong Answer\n"); } scanf("%d", &N); while ( N-- ) { scanf("%d", &X); P = Find(L, X); if ( P == ERROR ) printf("Finding Error: %d is not in.\n", X); else { flag = Delete(L, P); printf("%d is found and deleted.\n", X); if ( flag==false ) printf("Wrong Answer.\n"); } } flag = Insert(L, X, NULL); if ( flag==false ) printf("Wrong Answer\n"); else printf("%d is inserted as the last element.\n", X); P = (Position)malloc(sizeof(struct LNode)); flag = Insert(L, X, P); if ( flag==true ) printf("Wrong Answer\n"); flag = Delete(L, P); if ( flag==true ) printf("Wrong Answer\n"); for ( P=L->Next; P; P = P->Next ) printf("%d ", P->Data); return 0; } List MakeEmpty(){ //创建并返回一个空的线性表; List head=(List)malloc(sizeof(struct LNode)); head->Next=NULL; return head; } Position Find( List L, ElementType X ){//返回线性表中X的位置。若找不到则返回ERROR; while(L){ if(L->Data==X){ return L; break; } L=L->Next; } return ERROR; } /* 将X插入在位置P指向的结点之前,返回true。 如果参数P指向非法位置, 则打印“Wrong Position for Insertion”, 返回false; */ bool Insert( List L, ElementType X, Position P ){ if(L==P){ L=(List)malloc(sizeof(struct LNode)); L->Data=X; L->Next=P; return true; } while(L){ if(L->Next==P) break; L=L->Next; } if(!L){ printf("Wrong Position for Insertion\n"); return false; } L->Next=(List)malloc(sizeof(struct LNode)); L->Next->Data=X; L->Next->Next=P; return true; } /* 将位置P的元素删除并返回true。 若参数P指向非法位置, 则打印“Wrong Position for Deletion” 并返回false。 */ bool Delete( List L, Position P ){ if(L->Next==P){ L->Next=P->Next; return true; } while(L){ if(L->Next==P) break; L=L->Next; } if(!L){ printf("Wrong Position for Deletion\n"); return false; } L->Next=P->Next; return true; }
相关文章推荐
- 带头结点的链式表操作集(浙大数据结构)
- 4-6 带头结点的链式表操作集 (20分)
- 4-6 带头结点的链式表操作集
- 带头结点的链式表操作集
- 4-6 带头结点的链式表操作集
- 6-6 带头结点的链式表操作集(20 point(s))
- PTA数据结构与算法题目集(中文)4-6 带头结点的链式表操作集 (20分)
- 带头结点的链式表操作集
- 单向链表逆转(带头结点)的两种方法
- 对带头结点的单链表实现就地逆置的算法分析
- 用二级指针操作不带头结点的单链表
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,
- 【数据结构】·【带头结点的单链表】
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- 带头结点的单链表实现
- 带头结点的线性链表类型
- java数据结构之带头结点的单链表
- 不带头结点的头插法和尾插法
- 【c++版数据结构】之双链表的实现(带头结点以及尾节点)
- 2.3笔记-不带头结点的单链表