线性表

来源:互联网 发布:lamb动作数据百度云 编辑:程序博客网 时间:2024/06/05 02:40

一、顺序表

头文件

#ifndef Seplist_H#define Seplist_Hconst int MaxSize=50;class Seplist{public:Seplist(){length=0;}Seplist(int a[],int n);~Seplist(){}void Insert(int i,int x);int Delete(int i);int Locate(int x);void Printlist();int Get(int i);private:int data[MaxSize];int length;};#endif

源文件1

#include <iostream>using namespace std;#include "头文件.h"Seplist::Seplist(int a[],int n){if (n>MaxSize)throw "参数非法";for(int i=0;i<n;i++)data[i]=a[i];length=n;}void Seplist::Insert(int i,int x){if(length>=MaxSize)throw"上溢";if(i<1||i>length+1)throw "位置非法";for (int j=length;j>=i;j--)data[j]=data[j-1];data[i-1]=x;length++;}int Seplist::Delete(int i){if (length==0)throw"下溢";if(i<1||i>length)throw"位置非法";int x=data[i-1];for(int j=i;j<length;j++)data[j-1]=data[j];length--;return x;}int Seplist::Locate(int x){for(int i=0;i<length;i++)if(data[i]==x)return i+1;return 0;}int Seplist::Get(int i){if(i<1&&i>length)throw"查找位置非法";else return data[i-1];}void Seplist::Printlist(){for (int i=0;i<length;i++)cout<<data[i]<<" ";cout<<endl;}

源文件2

#include <iostream>using namespace std;#include "头文件.h"void main(){int r[10]={70,80,89,85,90,69,60,75,95,98};Seplist student(r,10);cout<<"执行插入前数据为:"<<endl;student.Printlist();try{student.Insert(2,63);}catch(char *s){cout<<s<<endl;}cout<<"执行插入操作后的数据为:"<<endl;student.Printlist();cout<<"执行删除前的数据为"<<endl;student.Printlist();try{student.Delete(1);}catch (char *s){cout<<s<<endl;}cout<<"删除后的数据为"<<endl;student.Printlist();cout<<"输出值为x的元素的位置:";int x;cin>>x;    cout<<student.Locate(x)<<endl;cout<<"输出第y个元素的值"<<endl;int y;cin>>y;cout<<student.Get(y)<<endl;}
运行截图

二、单链表

头文件

#ifndef Linklist_H#define Linklist_Htemplate <class DataType>struct Node{DataType data;Node<DataType>*next;};tamplate<class DataType>class Lnklist{public:Linklist();Linklist(DataType a[],int n);~Linklist;int Locate(DataType x);void Insert(int i,DataType x);DataType Delete(int i);private:Node<DataType>*first;};#endf
源文件1

#include<iostream>using namespace std;#include"Linklist.h"template <class DataType>Linklist<DataType>::Linklist(){first=new Node<DataType>;         //生成头结点first->next=NULL;                 //头结点的指针域置空}template<class DataType>Linklist<DataType>::Linklist(DataType a[],int n){Node<DataType>*r,*s;first=new Node<DataType>;        //生成头结点r=first;                         //尾指针初始化for(int i=0;i<n;i++){s=new Node<DataType>;s->data=a[i];                //为每个数组元素建立一个结点r->next=s;r=s;               //将结点S插入到终端结点之后}r->next=NULL;                    //将终端结点的指针置空}template<class DataType>Linklist<DataType>::~Linklist(){Node<DataType>*q=NULL;while(first!=NULL)               //释放单链表的每一个结点的存储空间{q=first;                     //暂存被释放结点first=first->next;           //first指向被释放结点的下一个结点delete q;}}template<class DataType>void Linklist<DataType>::Insert(int i,DataTyple x){Node<DataType>*p=first,*s=NULL;  //工作指针P指向结点int count=0;while(p!=NULL&&count<i-1)        //查找第1个结点{p=p->next;                   //工作指针P后移count++;}if (p==NULL)throw"位置";         //没有找到第i-1个结点else {s=new Node<DataType>;s->data=x;//结点S的数据域为Xs->next=p->next;p->next=s;    //将结点S插入到结点P之后}}template<class DataType>DataType Linklist<DataType>::Delete(int i){Node<DataType>*p=fitst,*q=NULL;   //工作指针P指向头结点DataType x;int count=0;while (p!=NULL&&count<i-1)       //查找第i-1个结点{p=p->next;count++;}if (p==NULL||p->next==NULL)     //结点P或P的后继结点不存在throw "位置";else{q=p->next;x=q->data;        //暂存被删结点p->next=q->data;            //摘链 delete q;return x;}}template<class DataType>int Linklist<DataType>::Locate(DataType x){Node<DataType>*p=first->next;    //工作指针P初始化int count =1;                    //累加器count初始化while(p!=NULL){if(p->data==x)return count;  //查找成功,返回序号p=p->next;count++;}return 0;                        //退出循环表明查找失败}template<class DataType>void Linklist<DataType>::Printlist(){Node<DataType>*p=first->next;    //工作指针P初始化while(p!=NULL){cout<<p->data<<" ";p=p->next;                   //工作指针P后移}cout<<endl;}

源文件2

#include<iostream>using namespace std;#include "Linklist.cpp"void main(){int r[10]={70,89,90,67,85,93,77,88,95,60};Linklist<int>L(r,10);cout<<"执行插入操作前数据位"<<endl;L.Printlist();try{L.Insert(2,93);         //在第二个位置插入值为93的元素}catch (char *s){cout<<s<<endl;}cout<<"执行出入操作后数据为:"<<endl;L.Printlist();cout<<"值为88的元素位置为:"<<endl;cout<<L.Locate(88)<<endl;    //查找元素88,并返回在单链表中位置cout<<"执行删除操作前数据为"<<endl;try{L.Delete(1);           //删除第1个元素}catch(char *s){cout<<s<<endl;}cout<<"执行删除操作后数据位"<<endl;L.Printlist();}




0 0