实验二 单链表基本操作的实现

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

实验二单链表基本操作的实现

【实验课程名称】数据结构

【实验项目名称】单链表基本操作的实现

【实验目的】

1 理解单链表的存储结构及基本操作的定义;

2掌握单链表存储基本操作;

3学会设计实验数据验证程序。

【实验仪器及环境】计算机,window xp操作系统,VC++6.0

【实验内容及步骤】

1.单链表顺序存储基本操作

存储结构定义:

typedef struct LNode{ //结点类型

ElemType data;

struct LNode *next;

}*Link,*Position;

typedef struct{ //链表类型

Link head,tail;

int len;

}LinkList;

实现的基本操作:

#include

#include

#include

#include

using namespace std;

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status;

typedef int ElemType;

typedef struct LNode{ //结点类型

ElemType data;

struct LNode *next;

}*Link,*Position;

typedef struct{ //链表类型

Link head,tail;

int len;

Position MakeNode_L(Link &p,ElemType e) //创建结点

{

p=(Link)malloc(sizeof(LNode));

if(!p) return ERROR;

p->data=e;

p->next=NULL;

return p;

}

void FreeNode_L(Link &q) //释放结点

{

free(q);

}

Status InitList_L(LinkList &L){

//初始化L为一个带头结点的空链表,头尾指针指向头结点,表长赋

ElemType e;

e=-1;//实际应用中此初始化语句需要修改

if(!MakeNode_L(L.head,e))return ERROR;//开辟头结点

L.tail=L.head;L.len=0;

return OK;

}//InitList_L

Status DestroyList_L(LinkList &L){//销毁链表L

Link p;

while(p=L.head->next){//依次释放有序链表中第一个元素至最后一个元素所占用空间;

L.head->next=p->next;

free(p);

}

free(L.head);

L.head=NULL;L.tail=NULL;L.len=0;

cout<

return OK;

}//DestroyList_L

Status ClearList_L(LinkList &L) {//清空线性单链表

Link p,q;

p=L.head->next;

while(p)

{

q=p->next;

free(p);

p=q;

}

L.tail=L.head;

return OK;

}

Status InsFirst_L(LinkList &L,Link s) //在首元素前插入一个结点{

s->next=L.head->next;

if(!L.head->next)

L.tail=s;

L.head->next=s;

L.len++;

return OK;

}

Status DelFirst_L(LinkList &L,Link h,Link &q) //删除首结点

{

h=L.head;

q=L.head->next;

if(q)

{

h->next=q->next;

q->next=NULL;

if(!h->next)

L.tail=h;

L.len--;

return OK;

}

else

return ERROR;

}

Status Append_L(LinkList &L,Link s) //将两个链表跟一个字符串连接起来{

Link q;

if(!L.head->next)

L.head->next=q=s;

else

L.tail->next=q=s;

while(q->next)

{

q=q->next;

}

L.tail=q;

return OK;

}

相关文档
最新文档