6-5 链式表操作集(20 point(s))
来源:互联网 发布:javashop最新源码下载 编辑:程序博客网 时间:2024/05/20 08:42
6-5 链式表操作集(20 point(s))
本题要求实现链式表的操作集。
函数接口定义:
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指向非法位置,则打印“Wrong Position for Insertion”,返回ERROR;
List Delete( List L, Position P )
:将位置P的元素删除并返回链表的表头。若参数P指向非法位置,则打印“Wrong Position 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"); else printf("%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;}/* 你的代码将被嵌在这里 */
输入样例:
612 2 4 87 10 242 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 InsertionWrong Position for Deletion10 4 2 5code:
Position Find( List L, ElementType X ){ while(L!=NULL){ if(L->Data == X){ return L; } L = L->Next; } return ERROR;}List Insert( List L, ElementType X, Position P ){ //printf("1111111111\n"); List head = L;//保存表头 List p = (List)malloc(sizeof(struct LNode)); p->Data = X; //创建要插入元素的节点并对其进行复制 p->Next = NULL; if(P==L){ p->Next = L;//特殊情况,当插到表头时 return p; } // printf("22222222222\n"); while(L!=NULL){//一般情况,查找时要找到所要插入元素的前一个才能插入所以找的是P==L->Next; if(P==L->Next){ List temp = L->Next; L->Next = p; p->Next = temp; // printf("333333333333333\n"); return head;//返回表头 } L = L->Next;//指向下一个元素,一开始忘了写导致无限循环 } printf("Wrong Position for Insertion\n");//没有找到说明位置非法返回ERROR return ERROR;}List Delete( List L, Position P ){ //当删除表头时: if(L == P){ L = L->Next; return L; } List head = L;//记录头 //一般情况下,也是要找所删元素的前一个元素 while(L!=NULL){ if(L->Next==P){ List temp = L->Next->Next; L->Next = temp;//L->Next指向跳过L->NEXT的后面一串 return head;//返回头 } L = L->Next;//指向下一个元素 } //没找到说明位置非法 printf("Wrong Position for Deletion\n"); return ERROR;}
阅读全文
1 0
- 6-5 链式表操作集(20 point(s))
- 6-6 带头结点的链式表操作集(20 point(s))
- 6-2 顺序表操作集(20 point(s))
- 6-3 求链式表的表长(10 point(s))
- 7-13 求链式线性表的倒数第K项(20 point(s))
- 6-4 链式表的按序号查找(10 point(s))
- 6-12 二叉搜索树的操作集(30 point(s))
- 链式表操作集
- 链式表操作集
- 6-1 单链表逆转(20 point(s))
- 6-9 求二叉树高度(20 point(s))
- 6-13 Percolate Up and Down(20 point(s))
- 6-14 Add Two Polynomials(20 point(s))
- 6-19 Count Connected Components(20 point(s))
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分)
- 4-5 链式表操作集 (20分) PTA
- 6-4 链式表的按序号查找(10 point(s))
- NOIP复赛复习(六)算法分析与排序模板
- 福利 | 与院士和业界翘楚共话智能无人系统!
- Google Java Style 中文版
- 理解模型——用树的概念理解递归
- 6-5 链式表操作集(20 point(s))
- 讲给Android程序员看的前端教程(15)——CSS选择器(5)
- 客制化键盘之GH60折腾
- NOIP复赛复习(五)程序对拍与图论模板
- Python采集实例1
- 6-6 带头结点的链式表操作集(20 point(s))
- expdp、impdp 使用sys用户操作时的注意事项
- 跟大师学习系统编程---操作系统加载(9)
- 打开MySQL数据库远程访问的权限