4-5 链式表操作集 (20分) PTA
2017-04-30 16:02
337 查看
本题要求实现链式表的操作集。
函数接口定义:
Position Find( List L, ElementType X ); List Insert( List L, ElementType X, Position P ); List Delete( List L, Position P );其中
List结构定义如下:
typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;各个操作函数的定义为:
Position Find( List L, ElementType X ):返回线性表中首次出现X的位置。若找不到则返回ERROR;
List Insert( List L, ElementType X, Position P ):将X插入在位置P指向的结点之前,返回链表的表头。如果参数P指向非法位置,则打印“WrongPosition for Insertion”,返回ERROR;
List Delete( List L, Position P ):将位置P的元素删除并返回链表的表头。若参数P指向非法位置,则打印“WrongPosition for Deletion”并返回ERROR。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>#define ERROR NULLtypedef int ElementType;typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Next; }; typedef PtrToLNode Position; typedef PtrToLNode List;Position Find( List L, ElementType X ); List Insert( List L, ElementType X, Position P ); List Delete( List L, Position P );int main(){List L;ElementType X;Position P, tmp;int N;L = NULL;scanf("%d", &N);while ( N-- ) {scanf("%d", &X);L = Insert(L, X, L);if ( L==ERROR ) 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 {L = Delete(L, P);printf("%d is found and deleted.\n", X);if ( L==ERROR )printf("Wrong Answer or Empty List.\n");}}L = Insert(L, X, NULL);if ( L==ERROR ) printf("Wrong Answer\n");elseprintf("%d is inserted as the last element.\n", X);P = (Position)malloc(sizeof(struct LNode));tmp = Insert(L, X, P);if ( tmp!=ERROR ) printf("Wrong Answer\n");tmp = Delete(L, P);if ( tmp!=ERROR ) printf("Wrong Answer\n");for ( P=L; P; P = P->Next ) printf("%d ", P->Data);return 0;}/* 你的代码将被嵌在这里 */
输入样例:
6 12 2 4 87 10 2 4 2 12 87 5
输出样例:
2 is found and deleted. 12 is found and deleted. 87 is found and deleted. Finding Error: 5 is not in. 5 is inserted as the last element. Wrong Position for Insertion Wrong Position for Deletion
10 4 2 5
思路:略
原题传送门:https://pta.patest.cn/pta/test/15/exam/3/question/728
Position Find( List L, ElementType X ){List P = L;while(P){if(P->Data == X) return P;P = P->Next;}return ERROR; } List Insert( List L, ElementType X, Position P ) { List head=L; List P1; if(L==P){head=(List)malloc(sizeof(struct LNode)); head->Data=X;head->Next=P;return head; } while(L){ if(L->Next==P) break; L=L->Next; } if(!L){printf("Wrong Position for Insertion\n"); return ERROR; } P1=(List)malloc(sizeof(struct LNode)); P1->Data=X; P1->Next=P;L->Next = P1;return head; } List Delete( List L, Position P ) { if(L==P){L=L->Next; return L;} List head=L;while(L){ if(L->Next==P)break; L=L->Next;}if(!L){printf("Wrong Position for Deletion\n"); return ERROR;}L->Next=P->Next;free(P); return head; }
相关文章推荐
- PTA数据结构与算法题目集(中文)4-5 链式表操作集 (20分)
- PTA数据结构与算法题目集(中文)4-6 带头结点的链式表操作集 (20分)
- 4-5 链式表操作集 (20分)
- [PTA]4-8 Percolate Up and Down (20分)
- PTA教辅 输出全排列 (20分)
- 4-6 带头结点的链式表操作集 (20分)
- PTA数据结构与算法题目集(中文)5-1 最大子列和问题 (20分)
- PTA 5-15 数组循环左移 (20分)【List】
- PTA 7-2 堆栈操作合法性(20 分)20分代码
- PTA数据结构与算法题目集(中文)4-1 单链表逆转 (20分)
- 【PTA 5-1 N个数求和 (20分)】+ gcd
- PTA 4-10 阶乘计算升级版 (20分)
- PTA数据结构与算法题目集(中文)4-2 顺序表操作集 (20分)
- pta 5-38 数列求和-加强版 (20分)
- pta5-51 两个有序链表序列的合并(20分)
- 4-2 顺序表操作集 (20分) PTA
- PTA 5-52 两个有序链表序列的交集 (20分) (单链表)
- PTA 7-28猴子选大王(20分)
- PTA 基础编程题 5-29 删除字符串中的子串 (20分)
- PTA数据结构与算法题目集(中文)4-7 在一个数组中实现两个堆栈 (20分)