6-6 带头结点的链式表操作集(20 point(s))
来源:互联网 发布:javashop最新源码下载 编辑:程序博客网 时间:2024/05/20 07:32
6-6 带头结点的链式表操作集(20 point(s))
本题要求实现带头结点的链式表操作集。
函数接口定义:
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。
裁判测试程序样例:
#include <stdio.h>#include <stdlib.h>#define ERROR NULLtypedef 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;}/* 你的代码将被嵌在这里 */
输入样例:
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:具体解释在代码注释中
List MakeEmpty(){ List L = (List)malloc(sizeof(struct LNode));//malloc创建头节点 L->Next = NULL;//初始化为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 q = (List)malloc(sizeof(struct LNode)); q->Data = X; q->Next = P;//创建新节点赋值X,下一个为P位置 while(L!=NULL){ if(L->Next==P){//找到位置的前一个 L->Next = q;//L的下一个指向新节点 return true; } L = L->Next; } printf("Wrong Position for Insertion\n"); return false;}bool Delete( List L, Position P ){ while(L!=NULL){ if(L->Next==P){ L->Next = P->Next;//直接让L的下一个指向删除位置节点下一个 return true; } L = L->Next; } printf("Wrong Position for Deletion\n"); return false;}
阅读全文
0 0
- 6-6 带头结点的链式表操作集(20 point(s))
- 4-6 带头结点的链式表操作集
- 4-6 带头结点的链式表操作集
- 带头结点的链式表操作集
- 带头结点的链式表操作集
- 带头结点的链式表操作集
- 4-6 带头结点的链式表操作集 (20分)
- 4-6 带头结点的链式表操作集 (20分)
- 6-5 链式表操作集(20 point(s))
- PTA数据结构与算法题目集(中文)4-6 带头结点的链式表操作集 (20分)
- 数据结构及算法——带头结点的链式表操作集(C语言)
- 6-2 顺序表操作集(20 point(s))
- 6-3 求链式表的表长(10 point(s))
- 6-4 链式表的按序号查找(10 point(s))
- 带头结点的线性表的链式实现
- 带头结点的链表基本操作
- 7-13 求链式线性表的倒数第K项(20 point(s))
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- 6-5 链式表操作集(20 point(s))
- 讲给Android程序员看的前端教程(15)——CSS选择器(5)
- 客制化键盘之GH60折腾
- NOIP复赛复习(五)程序对拍与图论模板
- Python采集实例1
- 6-6 带头结点的链式表操作集(20 point(s))
- expdp、impdp 使用sys用户操作时的注意事项
- 跟大师学习系统编程---操作系统加载(9)
- 打开MySQL数据库远程访问的权限
- android StringBuffer实现换行
- 2.Myeclipse快捷键
- js打印值为[object HTMLInputElement]
- 一个APP吊起另外一个APP
- python 中变量的命名规范