带头结点的单链表(一)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

带头结点的单链表(一)【基本操作训练】——

现有以下定义,你的函数可以直接使用,无需再提交。

#define True 11

#define False 0

#define Ok 111

#define Error -111

#define List_Init_Size 10

#define ListIncrement 10

typedef int Status;//状态类型

typedef struct{

int num;//专家号,不重复,可用于查找专家

char name[30];//专家姓名,可能重复

}ElemType; //元素类型-----专家信息数据类型---------特别关注“数据元素”-------------//

typedef ElemType ET;

typedef struct Lnode{

ElemType data;

struct Lnode *next;

}LNode,*LinkList;

在招投标系统中,专家信息的更新换代比较频繁,假定采用“单链表”结构存储专家信息,请完成以下“带头结点的单链表”的部分基本操作:

(1)(10分)

功能:构造一个带头结点的空单链表 L。

函数名:InitList_L

参数:单链表头指针L

返回值:成功返回Ok;否则,返回Error。

注意:考虑是否引用型参数、参数是怎样的数据类型、返回值类型应当如何? (2)(10分)

功能:求单链表L的长度

函数名:ListLength_L

参数:单链表头指针L

返回值:实际元素个数

注意:考虑是否引用型参数、参数是怎样的数据类型、返回值类型应当如何? (3)(20分)

功能:取表L中的第i个结点值赋值给参数e(注意i的取值范围)

函数名:GetElem_L

参数:单链表头指针L,位置i,数据元素e

返回值:取值成功返回Ok;否则,返回Error。

注意:考虑是否引用型参数、参数是怎样的数据类型、返回值类型应当如何? (4)(20分)Status ListInsert_L(LinkList L , int i , ET e);

功能:在表L的第i个位置上插入一个值为e的数据元素。

返回值:成功返回Ok;否则,返回Error。

(5)(20分)Status ListDelete_L(LinkList L , int i , ET &e);

功能:在表L中删除位序为 i 的数据元素,并将删除的元素赋值给e。

返回值:成功返回Ok;否则,返回Error。

(6)(20分)Status PriorElem_L(LinkList L , ET e , ET &pre_e); 功能:在表L中求元素e的直接前驱元素,并赋值给pre_e。

返回值:成功返回Ok;否则,返回Error。

注意:针对当前的情形,用元素中num成员(比如:e.num)进行比较

注意:

(1)不用编写main函数,函数中没有任何输入输出语句;

(2)所有函数必须同时提交,另外,需要用到特殊的库函数,请自行包含其头文件;否则编译出错;

(3)在 VC 或 VS 环境中调试时,必须建立.CPP源文件。

【【【【【请自主设计“测试程序”,证明你的每一个函数实现了相应功能(以下两个函数有助于测试,不提交)。】】】】】

void printLinkList1(LinkList L)

{

int len=0;

LinkList p=L;

printf("\n单链表的元素为:");

while(p->next){

len++;

p=p->next;

printf("%d ",p->data.num);

}

printf("\n单链表长度len=%d\n",len);

}

void CreateList_L1 (LinkList &L, int n)

//建立一个带头结点的长度为n的单链表L

{

int i;

LinkList p,tail;

L=( LinkList ) malloc ( sizeof ( Lnode ) ); //L指向头结点

tail=L;

printf("\n请输入%d个元素:",n);

for(i=n;i>0; --i)

{

p=( LinkList ) malloc ( sizeof ( Lnode ) ); //p为新结点

scanf("%d",&(p->data.num)); //为结点p的数据域赋值

tail->next=p;tail=p;

//将结点p插入到表尾

}

tail-> next = NULL;

}

预设代码

1.#include

2.#include

3.#define True 1

4.#define False 0

5.#define Ok 11

6.#define Error -11

7.typedef int Status;//状态类型

8.typedef struct{

9. int num;//专家号

10. char name[30];//专家姓名

11.}ElemType; //元素类型-----专家信息数据类型

12.typedef ElemType ET;

13.typedef struct Lnode{

14. ElemType data;

15. struct Lnode *next;

16.}LNode,*LinkList;

17.Status InitList_L( LinkList &L);//构造一个空的线性表L

18.int ListLength_L(LinkList L);

19.Status GetElem_L(LinkList L, int i, ElemType &e);

20.Status ListInsert_L(LinkList L , int i , ET

e);

21.Status ListDelete_L(LinkList L , int I , ET &e);

22.int LocateElem_L(LinkList L,ET e);

23.Status PriorElem_L(LinkList L , ET e , ET &pre_e);

24.Status NextElem_L(LinkList L , ET e

, ET &next_e);

25.Status InitList_L1( LinkList &L){//构造一个空的线性表L

26. L=(LinkList)malloc(sizeof(ET));

27. if(L==NULL)

28. return Error;

29. L->next=NULL;

30. return Ok;

31.}

相关文档
最新文档