当前位置:文档之家› 数据结构上机操作实验报告

数据结构上机操作实验报告

实验一单链表的基本操作(必做)一、实验目的1.掌握单链表的存储、初始化、插入、删除等操作的程序实现。

2.加深对单链表基本概念,基本理论及相应算法的掌握与理解。

3.了解链表的处理方式,学习体会简单的单链表程序实现相关知识。

二、实验内容1.建立一个链表、设计链表的基本操作实现算法、输出一个链表表,调试并输出结果。

2.编写一个程序实现如下功能:让计算机产生出50个0~9之间的随机数并依次保存到单链表中;输出遍历单链表;从单链表中删除与给定值相等的所有结点;输出遍历单链表;输出单链表长度,调试并输出结果。

三、实验步骤1.定义一个链表结构体。

2.利用插入功能插入一个结点。

3.利用删除功能删除一个结点。

四、程序运行测试1.利用插入功能插入一个结点。

2.利用删除功能删除一个结点。

五、实验报告要求1.绘制链表操作实现的流程图。

2.详细给出程序运行测试结果(包括测试数据和测试结果)。

3.选试验步骤2-3中的任意一个,给出程序的详细注释。

4.参考程序中某一部分功能的改进(选做)5.实验心得与体会6.附录,实验用源程序六、参考源代码#include <iostream.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}Lnode, *LinkList;//假设下面的单链表均为带头结点。

void CreatLinkList(LinkList &L,int j){//建立一个单链表L,数据为整数,数据由键盘随机输入。

LinkList p,q;L=(LinkList )malloc(sizeof(Lnode));L->next=NULL;q=L;cout<<"在单链表内输入整数:"<<endl;for(int i=0;i<j;i++) p=(LinkList)malloc(sizeof(Lnode)); cin>>p->data;p->next=q->next;q->next=p;q=p; }int PrintLinkList(LinkList &L){//输出单链表L的数据元素LinkList p;p=L->next;if(L->next==NULL){cout<<"链表没有元素!"<<endl;return 0;}cout<<"单链表的数据元素为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。

int i=0;LinkList p;p=L->next;while(p){ i++;p=p->next; }cout<<"单链表的数据元素个数为:"<<i<<endl; }int InsertLinkList(LinkList &L, int i, int x) {//在单链表L的第I个元素前插入一个数据元素X。

LinkList p,s;int j=0;p=L;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1){cout<<"插入元素的位置不合理!";return 0;}s=(LinkList)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;return 1;}int DeleteLinkList(LinkList &L,int i){//删除单链表L的第I个数据元素。

LinkList p,q;int j=0;p=L;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1){cout<<"删除元素的位置不合理!";return 0;}q=p->next;p->next=q->next;i=q->data;free(q);return 1;}void ClearLinkList(LinkList &L){//将单链表L置为空表。

L->next=NULL;}void DestroyLinkList(LinkList &L){//销毁单链表L。

LinkList p,q;p=L->next;while(L->next!=NULL){q=p->next;L->next=q;free(p);p=q;}free(L);cout<<"链表已经被销毁!"<<endl;}void main(){//调用上面的各函数,运行并检验程序是否正确。

LinkList L;int i,j,x;cout<<"---------------------------------------"<<endl;cout<<" 《单链表实验,按提示操作》"<<endl;cout<<"---------------------------------------"<<endl;cout<<"输入的元素的个数:";cin>>j;CreatLinkList(L,j);LinkListLengh(L);PrintLinkList(L);cout<<"在第几个元素前插入:";cin>>i;cout<<"输入插入的元素:";cin>>x;InsertLinkList(L,i,x);LinkListLengh(L);PrintLinkList(L);cout<<"输入删除元素的位置:";cin>>i;DeleteLinkList(L,i);LinkListLengh(L);PrintLinkList(L);ClearLinkList(L);cout<<"清空链表后:"<<endl;LinkListLengh(L);PrintLinkList(L);DestroyLinkList(L);}头文件h文件#include<iostream.h>#include<stdlib.h>typedef int ElemType; //规定元素类型为整struct LNode //定义单链表结构{ElemType data;LNode *next;}; //初始化单链表void InitList(LNode *& HL){HL=NULL; //将单链表置空}void InsertRear(LNode *&HL,const ElemType & item){LNode *newptr;newptr=new LNode; //为保存新元素分配动态结点, newptr指向这个结点。

if(newptr==NULL) //若未分配到结点,则停止插入,退出程序运行。

{cerr<<"Memory allocation failare!"<<endl;exit(1); }newptr->data=item; //把新元素赋给动态结点*newptr的值域newptr->next=NULL; //给动态结点的指针域置空if(HL==NULL)HL=newptr; //向空表插入的结点为表头结点else{LNode *p=HL;while(p->next!=NULL) //从表头开始遍历到最后一个结点为止p=p->next;p->next=newptr; //把新结点链接到表尾}}void TraverseList(LNode *&HL){ LNode *p=HL;while(p!=NULL){cout<<p->data<<" ";p=p->next; }cout<<endl;}int ListSize(LNode *&HL){ LNode *p=HL;int i=0; //用来统计结点的个数while(p!=NULL) //遍历单链表,统计结点数{ i++;p=p->next; }return i;}int Delete(LNode *&HL,const ElemType & item){if(HL==NULL){cerr<<"HL is NULL!"<<endl;return 0;}LNode *ap,*cp;ap=NULL;cp=HL;while(cp!=NULL)if(cp->data==item)break;else //使前驱指针和当前指针均指向下一个结点{ap=cp;cp=cp->next;}if(cp==NULL){cerr<<"Deleted element is not exist!"<<endl;return 0;}if(ap==NULL) //由cp指向的被删除结点是表头结点HL=HL->next;else //由cp指向被删除结点是非表头结点ap->next=cp->next;delete cp;return 1;}Cpp文件#include<iostream.h>#include<stdlib.h>typedef int ElemType; //规定元素类型为整#include "link.h" //此文件中保存有线性表操作在单链表(由动态独立节点构成)上的实现void main(){ //构成单链表LNode *head;InitList(head);int i,j;for(i=0;i<50;i++){ j=rand()%10;InsertRear(head,j);} //输出遍历单链表TraverseList(head);//从单链表中删除与键盘上输入的值相等的所有结点cout<<"输入一个0~10之间的一个整数:";cin>>j;while(Delete(head,j)){} //输出遍历单链表TraverseList(head); //输出单链表长度cout<<ListSize(head)<<endl;}实验二链表的应用—飞机票销售系统(选做)一、实验目的1.掌握单链表的存储。

相关主题