数据结构实验。
实验一 链表的插入和删除 一、实验内容:
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