带头结点的链式表操作集
2017-02-23 15:46
465 查看
本题要求实现带头结点的链式表操作集。
函数接口定义:
其中List结构定义如下:
各个操作函数的定义为:
裁判测试程序样例:
输入样例:
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
函数接口定义:
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 NULL
typedef 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;
}
/* 你的代码将被嵌在这里 */
输入样例:
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
List MakeEmpty(){ List L=(List)malloc(sizeof(struct LNode)); L->Next=NULL; return L; } Position Find( List L, ElementType X ){ while (L){ if (L->Data==X) break; L=L->Next; } return L; } bool Insert( List L, ElementType X, Position P ){ while (L->Next){ if (L->Next==P) break; L=L->Next; } if (L->Next!=P){ printf("Wrong Position for Insetion\n"); return false; } L->Next=(List)malloc(sizeof(struct LNode)); L->Next->Data=X; L->Next->Next=P; return true; } bool Delete( List L, Position P ){ if (!P){ printf("Wrong Position for Deletion\n"); return false; } while (L->Next){ if (L->Next==P) break; L=L->Next; } if (L->Next!=P){ printf("Wrong Position for Deletion\n"); return false; } L->Next=P->Next; return true; }
相关文章推荐
- 4-6 带头结点的链式表操作集 (20分)
- 带头结点的链式表操作集
- 带头结点的链式表操作集(浙大数据结构)
- 4-6 带头结点的链式表操作集
- 4-6 带头结点的链式表操作集
- 6-6 带头结点的链式表操作集(20 point(s))
- PTA数据结构与算法题目集(中文)4-6 带头结点的链式表操作集 (20分)
- 带头结点的链式表操作集
- 带头结点的链表
- 删除单链表(带头结点)的最小值结点
- 数据结构实验2-不带头结点的单链表
- 不带头结点的单链表的常规操作
- 带头结点与不带头结点的单链表初始化
- 带头结点和不带头结点的尾插法建立双链表
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 带头结点的循环链表基本操作
- 单向链表逆转(带头结点)的两种方法
- 对带头结点的单链表实现就地逆置的算法分析
- 用二级指针操作不带头结点的单链表
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,