数据结构线性表实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++; }