线性表
来源:互联网 发布: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
- 线性表--线性存储
- 线性表 线性结构
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- 线性表
- eclipse 中如何改变字体、背景颜色、高亮等
- 【UVA】434-Matty's Blocks
- Cocos2d-x的Android平台添加Protobuffer支持
- kvm安装以及用kvm装虚拟机
- HDU 1686 Oulipo(kmp)
- 线性表
- LinuxMint如何从中文环境直接配置到英文环境(一次性)
- Linux下的负载均衡19心得
- FFMPEG结构体分析 AVFrame
- 什么时间,开个博客
- ajaxfileupload文件上传返回值处理 ajaxfileupload.js + spring mvc文件上传
- hdu 4915 括号匹配+巧模拟
- hdu2203 KMP水题
- Android JNI编程学习笔记(二)——深入了解NDK