数据结构教程(第二版)课后答案

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

实验题 2.2 编写一个程序algo2-2.cpp,实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能。

(1)初始化单链表h;

(2)依次采用尾插法插入a,b,c,d,e元素;

(3)输出单链表h;

(4)输出单链表h长度;

(5)判断单链表h是否为空;

(6)输出单链表h的第3个元素;

(7)输出元素a的位置;

(8)在第4个元素位置上插入‘f’元素;

(9)输出单链表h;

(10)删除h的第3个元素;

(11)输出单链表h;

(12)释放单链表h;

程序:

#include

#include

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define NULL 0

typedef int Status;

typedef int ElemType;

typedef struct LNode {

ElemType data;

struct LNode *next;

}LNode,*LinkList;

Status InitList_h(LinkList &h) { //初始化线性表

h=(LinkList )malloc(sizeof(LNode)); //h指向头节点,头节点数据域为空

h->next=NULL;

return OK;

}// InitList_h

Status DispList_h(LinkList &h) { //输出线性表

LinkList p=h->next;

while(p!=NULL)

{

printf("%c",p->data);

p=p->next;

}

return OK;

} // DispList_h

Status CreateList_h(LinkList &h,ElemType a[],int n) { //尾插法建表LinkList s,r;int i;

h=(LinkList )malloc(sizeof(LNode));

r=h;

for(i=0;i

{

s=(LinkList )malloc(sizeof(LNode));

s->data=a[i];

r->next=s;

r=s;

}

r->next=NULL;

return OK;

}// CreateList_h

Status ListLength_h(LinkList h) { //求线性表的长度LinkList p=h;int n=0;

while(p->next!=NULL)

{

n++;

p=p->next;

}

return(n);

}// ListLength_h

Status ListEmpty_h(LinkList h) { //判断单链表是否为空return(h->next==NULL);

}// ListEmpty_h

Status DestroyList_h(LinkList &h) { //销毁线性表

LinkList p=h,q=p->next;

while(q!=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

return OK;

}// DestroyList_h

Status GetElem_h(LinkList h, int i, ElemType &e) {

// h为带头节点的单链表的头指针。

// 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR

int j=0;

LinkList p=h;

while(j

{

j++;p=p->next;

}

if(p==NULL)

{

return ERROR;

}

else

{

e=p->data;

return OK;

}

}// GetElem_h

Status ListInsert_h(LinkList &h, int i, ElemType e) { //插入数据元素

int j=0;

LinkList p=h,s;

/*

找到插入节点的上一个元素,如果是头节点则退出,当i=1时表示头节点,i=2时,表示第一个元素

*/

while(j

{

j++;

p=p->next;

}

if(p==NULL)

{

return ERROR;

}

else

{

s=(LinkList )malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

return OK;

}

}// ListInsret_h

Status ListDelete_h(LinkList &h, int i, ElemType &e) { //删除数据元素int j=0;

LinkList p=h,q;

while(j

{

j++;

p=p->next;

}

if(p==NULL)

{

return ERROR;

}

else

{

q=p->next; //q为要删除的元素节点

if(q==NULL)

{

return ERROR;

}

e=q->data; //e为删除节点的数据区域

p->next=q->next;

free(q);

return OK;

}

}// ListDelete_h

int LocateElem_h(LinkList h, ElemType e) { //按元素值查找元素LinkList p=h->next;

int i=1;

while(p!=NULL&&p->data!=e)

{

p=p->next;i++;

}

//如果要插入的节点为头节点,则退出

if(p==NULL)

{

return ERROR;

}

else

{

return(i);

相关文档
最新文档