数据结构实验



数据结构实验。

实验一 链表的插入和删除 一、实验内容:

1.初始化链表L

2.销毁链表L

3.清空链表L

4.求链表L的长度

5.判链表L空否。

6.通过e返回链表L中第i个数据元素的内容

7.在链表L中检索值为e的数据元素

8.返回链表L中结点e的直接前驱结点

9.返回链表L中结点e的直接后继结点

10.在链表L中第i个数据元素之前插入数据元素e

11.将链表L中第i个数据元素删除,并将其内容保存在e中。

二、实验环境:

1.硬件环境

计算机一台

2.软件环境

Microsoft Visual Studio 2008集成开发环境

Windows操作系统(WindowsXP、Windows7、Windows Server 2008)

三、实验步骤:

#include <iostream>

using namespace std;

 

//实现线性表的链式存储结构的类型定义

typedef  int  Elemtype;

#define  OK 1;

#define  ERROR -1;

 

struct NODE //结点类型

{

Elemtype elem;

NODE *next;

};

 

struct LINK_LIST  //链表类型

{

NODE *head;

};

 

//典型操作的算法实现

//初始化链表L

int InitList(LINK_LIST *L)

{

L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元

if (L->head) {L->head->next=NULL; return OK;}

else return ERROR ;

}

 

//销毁链表L


void DestoryList(LINK_LIST *L)

{

NODE *p;

while (L->head)  //依次删除链表中的所有结点

{

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

free(p);

}

}

 

//清空链表L

void ClearList(LINK_LIST *L)

{

NODE *p;

while (L->head->next){ //p指向链表中头结点后面的第一个结点

p=L->head->next;

L->head->next=p->next; //删除p结点

free(p); //释放p结点占据的存储空间

}

}

 

//求链表L的长度

int ListLength(LINK_LIST L)

{

NODE *p;

int len;

len=0;

for(p=L.head;p->next!=NULL; p=p->next)

len++ ;

return(len);

}

 

// 判链表L空否。

int IsEmpty(LINK_LIST L)

{

if (L.head->next==NULL) return true;

else return false;

}

 

//()通过e返回链表L中第i个数据元素的内容

void GetElem(LINK_LIST *L,int i,Elemtype *e)

{

NODE *p;

int j;

if (i<1||i>ListLength(*L))

exit(-1); //检测i值的合理性

for (p=L.head,j=0; j!=i; p=p->next,j++);

p =&n