数据结构线性表实验报告

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

序号

数据结构实验报告

班级姓名同组者/ 成绩

日期 3.9指导教师

实验名称实验一线性表及其应用

一、实验目的

1、深刻理解线性表的逻辑特性及其顺序、链式存储方式的特点。

2、熟练掌握线性表的常用操作(建立、插入、删除、遍历等)在顺序、链式存储上的实现。

3、加深对C/C++等编程语言的相关知识点的理解(如结构体、指针、函数、引用参数等)。

二、实验内容

1、根据给定的整型数组,以尾插法建立一个单链表,并实现以下操作:

①查找:输入一个欲查找的整数,找到则显示第一个相匹配的整数在单链表中所处的位置,若不存在,则显示提示信息。

②删除:输入一个欲删除的整数e ,若存在则在单链表中删除第一个值为

e 的元素。

③插入:输入一个欲插入位置i 和欲插入元素e,将e 插入到第i 个整数之前(注意i 的合法性)。

A、算法思想

①创建

head 为头结点指针,初始时head->next 为NULL ;tail 始终指向当前链表的最后一个元素,其初始时指向头结点;p 始终指向每次申请的新结点,修改p->data 为当前读入的整数;修改tail->next 为p ,修改tail 为p ;最后修改tail->next 为NULL ,。

②插入

找到插入点的前驱(即第i-1 个结点)的指针p ;s 指向新申请的结点;修改s->data 为参数e,修改s->next 为p->next ,修改p->next 为s 。

③查找

……利用p进行遍历,直到节点的数据和所给的数据相同,输出节点的位置

④删除

……利用p进行遍历,并总是将p的前一节点的指针赋给pre,一旦找到,则删除节点并

退出循环,没有到话,反馈相关信息

B、算法源码

/*

*线性表及其应用

*/

#include

using namespace std;

typedef struct _LinkList

{

int elem;

struct _LinkList* next;

}LinkList;

void InitList(LinkList *&link );//构造一个含有头结点的链表

bool InsertList(LinkList *&link,int i,int e);//在第i个位置之前插入包含元素e的新节点void GetTailPointer(LinkList *link,LinkList *&tail);//获得单链表尾结点指针

void AddList(LinkList *&link,int e);//根据将e以尾插法插入链表

void DisplayList(LinkList *link);//打印静态链表中的所有数据

void LocatedList(LinkList *link,int e);//查找e的位置

void DeleteList(LinkList *&link,int e);//删除所在节点

void MergeList(LinkList *linka,LinkList *linkb,LinkList *&linkc);//归并

void InitList(LinkList *&link )//构造一个含有头结点的链表

{

LinkList *L,*head;

head = (LinkList *)malloc(sizeof(LinkList));

head -> next = NULL;

L = head;

link = L;

}

void AddList(LinkList *&link,int e)//根据将e以尾插法插入链表

{

LinkList *p =NULL;

p =(LinkList *)malloc(sizeof(LinkList));

p -> elem = e;

p->next = NULL;

LinkList *tail = link;

while(tail->next)

tail = tail -> next;

tail ->next= p;

}

void DeleteList(LinkList *&link,int e)//删除所在节点

{

LinkList *p = link,*pre = NULL;

while( p)//找到所在节点前的一节点

{

pre = p;

p = p->next;

if(p == NULL)

{

cout<<"无"<

break;

}

if(p ->elem == e)

{

pre ->next = p ->next;

free(p);

cout<<"成功删除数据"<

break;

}

}

}

void LocatedList(LinkList *link,int e)//查找e的位置

{

LinkList *p = link;

int i = 0;//位置

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

{

p = p ->next;

i++;

}

相关文档
最新文档