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>#defineERRORNULLtypedefenum{false, true} bool;typedefint ElementType;typedefstructLNode*PtrToLNode;structLNode{
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 );intmain(){
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");elseprintf("%d is inserted as the last element.\n", X);
P =(Position)malloc(sizeof(structLNode));
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);return0;}/* 你的代码将被嵌在这里 */
输入样例:
61224871024212875
结尾无空行
输出样例:
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
10425
结尾无空行
WA:
List MakeEmpty(){
List head =(List)malloc(sizeof(structLNode));
head->Next =NULL;return head;}
Position Find(List L, ElementType X){
Position p = L->Next;while(p !=NULL){if(p->Data == X)return p;
p = p->Next;}return ERROR;}
bool Insert(List L, ElementType X, Position P){
List q =(List)malloc(sizeof(structLNode));
q->Data = X;while(L->Next !=NULL){
L = L->Next;if(L->Next == P){
q->Next = P;
L->Next = q;return true;}}printf("Wrong Position for Insertion\n");return false;}
bool Delete(List L, Position P){
Position s = L;while(s !=NULL&& s->Next != P)
s = s->Next;if(s ==NULL){printf("Wrong Position for Deletion\n");return false;}
s->Next = P->Next;return true;}
AC:
List MakeEmpty(){
List Head =(List)malloc(sizeof(structLNode));
Head->Next =NULL;return Head;}
Position Find(List L, ElementType X){
Position P = L->Next;while(P !=NULL){if(P->Data == X)return P;
P = P->Next;}return ERROR;}
bool Insert(List L, ElementType X, Position P){
Position q = L;while(q !=NULL&& q->Next != P)
q = q->Next;if(q ==NULL){printf("Wrong Position for Insertion\n");return false;}
Position node =(Position)malloc(sizeof(structLNode));
node->Data = X;
node->Next = P;
q->Next = node;return true;}
bool Delete(List L, Position P){
Position s = L;while(s !=NULL&& s->Next != P)
s = s->Next;if(s ==NULL){printf("Wrong Position for Deletion\n");return false;}
s->Next = P->Next;return true;}
本题要求实现带头结点的链式表操作集。函数接口定义: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 D.