带头结点的单链表(一)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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.}