这是函数题模板。这里写题目要求。例如:本题要求实现单链表的各种基本操作,包括初始化、销毁、判空、求长度、输出、求元素、查找、插入、删除等。
函数接口定义:
在这里描述函数接口。例如:
void InitList(LinkList *&L) ;
void DestroyList(LinkList *&L);
bool ListEmpty(LinkList *L);
int ListLength(LinkList *L);
void DispList(LinkList *L);
bool GetElem(LinkList *L,int i,ElemType &e) ;
int LocateElem(LinkList *L,ElemType e);
bool ListInsert(LinkList *&L,int i,ElemType e);
bool ListDelete(LinkList *&L,int i,ElemType &e);
在这里解释接口参数。例如:
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //定义单链表结点类型
{
ElemType data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&L); //初始化线性表
void DestroyList(LinkList *&L); //销毁线性表
bool ListEmpty(LinkList *L);//判线性表是否为空表
int ListLength(LinkList *L); //求线性表的长度
void DispList(LinkList *L);//输出线性表
bool GetElem(LinkList *L,int i,ElemType &e) ;//求线性表中某个数据元素值
int LocateElem(LinkList *L,ElemType e);//按元素值查找
bool ListInsert(LinkList *&L,int i,ElemType e); //插入数据元素
bool ListDelete(LinkList *&L,int i,ElemType &e) ;//删除数据元素
int main()
{
LinkList *h;
ElemType e;
printf("单链表的基本运算如下:\n");
printf(" (1)初始化单链表h\n");
InitList(h);
printf(" (2)依次采用尾插法插入a,b,c,d,e元素\n");
ListInsert(h,1,'a');
ListInsert(h,2,'b');
ListInsert(h,3,'c');
ListInsert(h,4,'d');
ListInsert(h,5,'e');
printf(" (3)输出单链表h:");
DispList(h);
printf(" (4)单链表h长度=%d\n",ListLength(h));
printf(" (5)单链表h为%s\n",(ListEmpty(h)?"空":"非空"));
GetElem(h,3,e);
printf(" (6)单链表h的第3个元素=%c\n",e);
printf(" (7)元素a的位置=%d\n",LocateElem(h,'a'));
printf(" (8)在第4个元素位置上插入f元素\n");
ListInsert(h,4,'f');
printf(" (9)输出单链表h:");
DispList(h);
printf(" (10)删除h的第3个元素\n");
ListDelete(h,3,e);
printf(" (11)输出单链表h:");
DispList(h);
printf(" (12)释放单链表h\n");
DestroyList(h);
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
输出样例:
在这里给出相应的输出。例如:
单链表的基本运算如下:
(1)初始化单链表h
(2)依次采用尾插法插入a,b,c,d,e元素
(3)输出单链表h:a b c d e
(4)单链表h长度=5
(5)单链表h为非空
(6)单链表h的第3个元素=c
(7)元素a的位置=1
(8)在第4个元素位置上插入f元素
(9)输出单链表h:a b c f d e
(10)删除h的第3个元素
(11)输出单链表h:a b f d e
(12)释放单链表h
代码样例:
void InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
void DestroyList(LinkList *L)
{
LinkList *p=L,*q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=p->next;
}
free(p);
}
bool ListEmpty(LinkList *L)
{
return (L->next==NULL);
}
int ListLength(LinkList *L)
{
LinkList *p=L;
int i=0;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return (i);
}
void DispList(LinkList *L)
{
LinkList *p=L->next;
// int i=0;
while(p->next!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("%c ",p->data);
printf("\n");
}
bool GetElem(LinkList *L,int i,ElemType &e)
{
LinkList *p=L;
int j=0;
while(p!=NULL&&j<i)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
e=p->data;
return true;
}
}
int LocateElem (LinkList *L,ElemType e)
{
LinkList *p=L;
int j=0;
while(p!=NULL&&p->data==e)
{
j++;
p=p->next;
}
if(p==NULL)
return 0;
else
{
return (j+1);
}
}
bool ListInsert(LinkList *L,int i,ElemType e)
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j<i-1)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
bool ListDelete(LinkList *L,int i,ElemType &e)
{
LinkList *p=L,*s;
int j=0;
while(p!=NULL&&j<i-1)
{
j++;
p=p->next;
}
if(p==NULL)
return false;
else
{
s=p->next;
if(s==NULL)
return false;
e=s->data;
p->next=s->next;
free(s);
return true;
}
}