当前位置:文档之家› 数据结构实验报告册

数据结构实验报告册

实验一线性表的操作实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。

二、实验要求:1、掌握线性表顺序表类和链表类的特点。

掌握线性表的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:1.设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:建立一个线性表,首先依次输人数据元素1,2,3,…,10,然后删除数据元素6,最后依次显示当前线性表中的数据元素。

要求采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过10个。

第一题源代码:#include<iostream>using namespace std;template <class T> //定义模板类SeqListclass SeqList{private:int length,x,j,data[10];public:public:SeqList( ) //无参构造函数{length=0;}SeqList(T a[ ], int n) //有参构造函数{for(int i=0;i<n;i++)data[i]=a[i];length=n;}~SeqList( ) //析构函数为空{}int Length( ) //求线性表的长度{return length;}T Get(int i) //按位查找,取线性表的第i个元素{}int Locate(T x ) //按值查找,求线性表中值为x的元素序号{}void Insert(int i, T x) //在线性表中第i个位置插入值为x的元素{}T Delete(int i) //删除线性表的第i个元素{if(length==0)throw"下溢";if(i<1||i>length)throw"位置异常";x=data[i-1];for(j=i;j<length;j++)data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标length--;return x;}void PrintList( ) //遍历线性表,按序号依次输出各元素{for(int i=0;i<length;i++)cout<<data[i]<<" ";cout<<endl;}};void main(){int n=10,a[10]={1,2,3,4,5,6,7,8,9,10};SeqList<int> theseqlist(a,n);cout<<"删除前元素:";for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;theseqlist.Delete(6);theseqlist.PrintList();}运行结果:---------------------------------------------------------------------------------------------------------------------- 2.设计一个带头结点的单链表类,要求:(1)带头结点单链表类的成员函数包括取数据元素个数、插入元素、删除所有值为k的元素、取数据元素。

(2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。

第二题源代码:#include<iostream>using namespace std;template<class T>struct Node{T data;Node<T> *next;};/*****************************/template <class T>class LinkList{private:Node<T> *first; //单链表头指针int length;public:LinkList(){first=new Node<T>;first->next=NULL;}LinkList(T a[],int n) //建立n个节点的指针{Node<T> *s;first=new Node<T>;first->next=NULL; //初始化一个空链表for(int i=0;i<n;i++){s=new Node<T>;s->data=a[i];s->next=first->next;first->next=s;}length=n;}~LinkList(){Node<T> *p=first;while(p){Node<T> *q;q=p;p=p->next;delete q;}}int Length(); //求单链表长度T Get(int i); //取单链表第i个节点元素值int Locate(T x); //求单链表值为x的元素序号void Insert(int i,T x); //在单链表中第i个位置插入元素值x的节点T Delete(int i); //在单链表中删除第i个节点void PrintList(); // 遍历单链表,按序号依次输出个元素};/********************************/template<class T>int LinkList<T>::Length(){return length;}/******************************/template <class T>T LinkList<T>::Get(int i){int j;Node<T> *p;p=first->next;j=1;while(p&& j<i){p=p->next;j++;}if(!p)throw "位置";elsereturn p->data;}/***********************************/ template<class T>int LinkList<T>::Locate(T x){Node<T> *p;p=first;for(int i=0;i<length;i++){p=p->next;if(p->data==x)return i+1;}}/***********************************/ template<class T>void LinkList<T>::Insert(int i,T x){Node<T> *p;int j;p=first;j=0;while(p&&j<i-1){p=p->next;j++;}if(!p)throw"位置";else{Node<T> *s;s=new Node<T>;s->data=x;s->next=p->next;p->next=s;}length++;}/**************************************/template<class T>T LinkList<T>::Delete(int i){Node<T> *p;int j;p=first;j=0;while(p&&j<i-1){p=p->next;j++;}if(!p||!p->next)throw"位置";else{Node<T> *q;q=new Node<T>;int x;q=p->next;x=q->data;p->next=q->next;delete q;length--;return x;}}/*******************************************/template<class T>void LinkList<T>::PrintList() // 遍历单链表,按序号依次输出个元素{Node<T> *p;p=first;for(int i=0;i<length;i++){p=p->next;cout<<"第"<<(i+1)<<"个元素为:"<<(p->data)<<endl;}}/*******************************************/{int r[ ]={10,9,8,7,6,5,4,3,2,1};LinkList <int> a( r , 10 );cout<<"原表为:"<<endl;a.PrintList();cout<<endl;a.Insert(1,-2); //执行插入操作;a.Insert(2,-1);a.Insert(3,0 );cout<<"执行插入后输出为:"<<endl;a.PrintList();cout<<endl;a.Delete(1);a.Delete(1);a.Delete(1);cout<<"执行删除后输出为:"<<endl;a.PrintList();cout<<endl;cout<<"按位查找元素:"<<endl;cout<<"第5 个元素为: ";cout<<a.Get(5)<<endl; //查找链表中第5 个元素cout<<endl;}运行结果:实验二栈、队列、串的操作实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。

相关主题