博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6-4 带头结点的链式表操作集 (20 分)
阅读量:3908 次
发布时间:2019-05-23

本文共 3151 字,大约阅读时间需要 10 分钟。

本题要求实现带头结点的链式表操作集。

函数接口定义:

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 
#include
#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;}

/* 你的代码将被嵌在这里 */

输入样例:

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 head=(List)malloc(sizeof(struct LNode));	head->Data=0;	head->Next=NULL;	return head;}Position Find( List L, ElementType X ){	List existL=L;	while(existL)	{		if(existL->Data==X)			return existL;		existL=existL->Next;		}	return ERROR;}bool Insert( List L, ElementType X, Position P ){	List temp;	List pre;	for(pre=L;pre&&pre->Next!=P;pre=pre->Next);	if(pre!=NULL)	{		temp=(List)malloc(sizeof(struct LNode));		temp->Next=pre->Next;		pre->Next=temp;		temp->Data=X;		return true;	}	else	{		printf("Wrong Position for Insertion\n");		return false;	}		}bool Delete( List L, Position P ){	List pre;	for(pre=L;pre&&pre->Next!=P;pre=pre->Next);	if(pre==NULL || P==NULL)	{		printf("Wrong Position for Deletion\n");		return false;	}	else	{		pre->Next=P->Next;		free(P);		return true;	 } 	}

转载地址:http://udwrn.baihongyu.com/

你可能感兴趣的文章
项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS
查看>>
EntityFramework Core上下文实例池原理
查看>>
C# 8: 可变结构体中的只读实例成员
查看>>
11座城市,58个.NET最新岗位速览,内推直通面试官!
查看>>
【招聘(深圳)】华强方特文化科技集团 .NET工程师
查看>>
ASP.NETCore小技巧:使用测试用户中间件
查看>>
.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
查看>>
.NET 5 和 C#9 /F#5 一起到来, 向实现 .NET 统一迈出了一大步
查看>>
程序员过关斩将--从未停止过的系统架构设计步伐
查看>>
.NET Core 取消令牌:CancellationToken
查看>>
BCVP开发者说第一期:Destiny.Core.Flow
查看>>
行业思考 | 互联网对传统行业的降维打击
查看>>
简单聊聊C#中lock关键字
查看>>
.NET 5.0正式发布,有什么功能特性(翻译)
查看>>
asp.net core web api之异常
查看>>
部署Dotnet Core应用到Kubernetes(一)
查看>>
Net5 已经来临,让我来送你一个成功
查看>>
Magicodes.IE 3.0重磅设计畅谈
查看>>
一个 Task 不够,又来一个 ValueTask ,真的学懵了!
查看>>
如何在ASP.NetCore增加文件上传大小
查看>>