4-6 带头结点的链式表操作集

来源:互联网 发布:date php 格式化 编辑:程序博客网 时间:2024/05/29 16:35

4-6 带头结点的链式表操作集 (20分)

本题要求实现带头结点的链式表操作集。
函数接口定义:

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 5

点击访问 PTA-测验

/* 你的代码将被嵌在这里 */List MakeEmpty()//:创建并返回一个空的线性表;{List a=(List)malloc(sizeof(struct LNode));a->Data=0;a->Next=NULL;return a;}Position Find( List L, ElementType X )//:返回线性表中X的位置。若找不到则返回ERROR;{List F=L;while(F){    if(F->Data==X)break;    F=F->Next;}return F;}bool Insert( List L, ElementType X, Position P )//:将X插入在位置P指向的结点之前,返回true。如果参数P指向非法位置,则打印“Wrong Position for Insertion”,返回false;{   List F=L;while(F->Next){    if(F->Next==P)break;    F=F->Next;}if(F->Next!=P){printf("Wrong Position for Insertion\n");return false;}F->Next=(List)malloc(sizeof(struct LNode));F->Next->Data=X;F->Next->Next=P;return true;}bool Delete( List L, Position P )//:将位置P的元素删除并返回true。若参数P指向非法位置,则打印“Wrong Position for Deletion”并返回false。{List F=L;if(!P){    printf("Wrong Position for Deletion\n");return false;}while(F->Next){    if(F->Next==P)break;    F=F->Next;}if(F->Next!=P){    printf("Wrong Position for Deletion\n");return false;}F->Next=P->Next;return true;}
0 0
原创粉丝点击