数据结构及算法——带头结点的链式表操作集(C语言)
2016-01-22 00:21
567 查看
要求实现带头结点的链式表操作集。
函数接口定义:
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。
裁判测试程序样例:
输入样例:
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。
裁判测试程序样例:
[code]#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
【答案】:
[code]List MakeEmpty(){ List A; A=(List)malloc(sizeof(struct LNode)); A->Next=NULL; return A; } Position Find(List L,ElementType X){ Position p; p=L; for(;p->Data!=X&&p;p=p->Next); if(p==NULL)return ERROR; else return p; } bool Insert(List L,ElementType X,Position P){ Position pre,r; for(pre=L;pre&&pre->Next!=P;pre=pre->Next); if(pre==NULL){ printf("Wrong Position for Insertion"); return false; } else{ r=(Position)malloc(sizeof(struct LNode)); r->Data=X; r->Next=P; pre->Next=r; return true; } } bool Delete(List L,Position P){ Position pre; for(pre=L;pre&&pre->Next!=P;pre=pre->Next); if(pre==NULL||P==NULL){ printf ("Wrong Position for Deletion"); return false; } else{ pre->Next=P->Next; free(P); return true; } }
相关文章推荐
- 数据结构及算法——链式表操作集(C语言)
- Linux sk_buff 数据结构
- 数据结构及算法——链式表的按序号查找(C语言)
- 数据结构及算法——求链式表的长度(C语言)
- 数据结构及算法——顺序表操作集(C语言)
- 【重学数据结构】一元多项式的表示及相加
- 数据结构及算法——单链表逆转(C语言)(不间断更新)
- 数据结构之链表基本操作
- Java核心技术笔记——数据结构(3)
- 刨根问底-Redis数据结构剖析
- opencv数据结构-MAT结构详解
- 【数据结构】二叉树
- 数据结构_8:排序:C语言
- 数据结构_8:查找:Hash:C++
- 数据结构_8:查找:Hash:C语言
- 数据结构_8:查找:C++
- 数据结构_8:查找:平衡二叉树
- 数据结构_8:查找:二叉排序树
- 再谈单链表
- MySQL索引背后的数据结构及算法原理