数据结构-顺序表的实现_第1页
数据结构-顺序表的实现_第2页
数据结构-顺序表的实现_第3页
数据结构-顺序表的实现_第4页
数据结构-顺序表的实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验2顺序表问题描述:实现顺序表,根本操作包括构造、析构、插入、查找、删除、取值、赋值。需求分析简述程序的根本功能:建立一个类模板;创立了一个构造函数,用于动态的申请一定的空间;创立了一个析构函数,用于释放动态申请的空间;还可以对顺序表进行查找、插入、删除操作;以及对顺序表中的元素的输入输出等等。输入的形式和输入值的范围:首先输入要创立的顺序表的容量,形式为整形int;然后在操作选项中输入形式为字符型,有一定的容错能力,输出的形式:程序开始时创立数组需要输入容量,输入形式为整形int;用户选择1选项时,程序会提示用户输入元素的个数并给出范围,输入形式为整形int,然后开始输入元素;用户选择2选项时,程序会逐个输出现有的元素;用户选择3选项时,程序会提示输入所要查找的元素,输入形式为字符型char,然后进行逐个查找,并该输出元素的位置以及所找到的个数;用户选择4选项时,程序会提示输入所要查看的位置并给出范围,输入形式为整形int,然后输出该位置的元素;用户选择5选项时,程序会提示输入所要插入的位置以及现有的位置,输入形式为整形int,然后可以输入所要插入的元素,输入形式为字符型char;用户选择6选项时,程序会提示输入您所要删除的元素,输入形式为字符型char,然后会输出删除的元素位置以及个数;用户选择7选项时,程序会输出现在列表中的元素个数;用户选择8选项时,程序会输出数组的容量及最多可容纳元素个数;用户选择9选项时,程序清空列表删除列表中的所有元素;用户选择0选项时,程序结束。测试数据要求、选择选项时,不管输入几个字符,只读取第一个字符;、选择选项时,输入的字符不能过多,假设输入过多的字符就会出现异常;、输入元素时,每个元素只能是一个字符,输入多个字符会出错;、在输入、查找、插入元素时,会有范围提示,超出范围程序提示错误,并可以重新输入;、在查找和删除元素时,假设没有此元素,会给出提示;概要设计抽象数据类型:在该程序中,定义了一个类模板templateclassTSeqList,在该类中有*m_elem、m_len和m_maxsize三个私有成员分别表示该类的列表指针、现有元素个数和列表最大容量;自己定义了构造函数TSeqList()和析构函数~TSeqList(),还有对列表进行输入、输出、查找、插入以及删除等操作的函数;并在主函数中对该类模板进行实例化。主程序流程及模块调用关系结束结束NY调用函数input()输入数据按照元素查找元素按照位置查看元素在指定位置插入元素提示输入错误删除指定的元素调用函数output()输出数据输出现有的数据个数输出数组的最大容量清空列表令a=false开始赋值a=true调用cmain〔〕函数输出主菜单输入选项i的值i[0]=1i[0]=2i[0]=3i[0]=4i[0]=5i[0]=6i[0]=其它值a=true?创立char类型数组i[0]=7i[0]=8i[0]=9i[0]=0详细设计抽象数据类型的实现:包括类型定义和各个操作的实现。类的定义与实现list.h文件:#include<iostream>usingnamespacestd;template<classT>classTSeqList{ private: T*m_elem; //用于存放数组的指针 intm_maxsize; //数组的最大容量 intm_len; //现有元素个数 public: TSeqList(); //构造函数 ~TSeqList(){delete[]m_elem;}; //析构函数 voidLength(){cout<<"数组的长度:"<<m_len<<endl;}; //用于输出现有元素个数的函数 voidSize(){cout<<"数组最多容纳元素个数:"<<m_maxsize<<endl;}; //输出数组容量的函数 voidSearch1(); //按照元素进行查找 voidSearch2(); //按照元素位置进行查找 voidInsert(); //插入元素 voiddel(); //删除元素 boolSeqEmputy(){cout<<"清空列表。";m_len=0;Length();return(m_len==0)?true:false;};//清空列表 voidoutput(); //输出元素 voidinput(); //输入元素};constintm_extend=10;template<classT>TSeqList<T>::TSeqList(){ cout<<"输入要创立数组最多容纳元素个数:"; cin>>m_maxsize; m_len=0; m_elem=newT[m_maxsize];}template<classT>voidTSeqList<T>::Search1(){ Te;inti,j=0; cout<<"请查找元素:";cin>>e; cout<<"输出它的位置:"<<endl; for(i=0;i<m_len;i++) if(m_elem[i]==e) { cout<<"第"<<i+1<<"位"<<endl; j++; } if(j==0)cout<<"没有这个元素!"<<endl; elsecout<<"共查找到"<<j<<"个"<<e<<"元素"<<endl;}template<classT>voidTSeqList<T>::Search2(){ inti; if(m_len) { cout<<"请输入要查找的位置"<<"〔1~"<<m_len<<"〕:"; while(true) { cin>>i; if(i<1||i>m_len)cout<<"无此位置!请重新输入:"; elsebreak; } cout<<"第"<<i<<"元素是"<<m_elem[i-1]<<endl; } elsecout<<"列表为空,无法查询!"<<endl;}template<classT>voidTSeqList<T>::del(){ inti,j,k=0;Te; if(m_len) { cout<<"输入要删除的元素:"; cin>>e; cout<<"您要删除的元素是:"<<e<<endl; for(i=m_len-1;i>=0;i--) { if(m_elem[i]==e) { m_len--; for(j=i;j<m_len;j++) { m_elem[j]=m_elem[j+1]; } k++; cout<<"删除了第"<<i+1<<"元素"<<e<<endl; } } if(k==0)cout<<"没有这个元素!"<<endl; elsecout<<"共删除了"<<k<<"个"<<e<<"元素"<<endl; } elsecout<<"列表为空!不能删除!"<<endl;}template<classT>voidTSeqList<T>::Insert(){ inti;Te; cout<<"输入要插入的位置〔在1到"<<m_len+1<<"之间〕:"; cin>>i;loop:if(i<1||i>m_len+1) { cout<<"无此位置!重新输入位置〔在1到"<<m_len+1<<"之间〕:"; cin>>i; gotoloop; } cout<<"输入要插入的元素:"; cin>>e; if(m_len==m_maxsize) { T*p=newT[m_maxsize+=m_extend]; for(intk=0;k<=m_len;k++) p[k]=m_elem[k]; delete[]m_elem; m_elem=p; cout<<"空间已满,现在已经扩充......"<<endl; Size(); } if(i==++m_len) { m_elem[i-1]=e; } else { for(intk=m_len;k>=i;k--) m_elem[k]=m_elem[k-1]; m_elem[i-1]=e; }}template<classT>voidTSeqList<T>::output(){ if(m_len==0)cout<<"没有任何元素!"<<endl; else { for(inti=0;i<m_len;i++) cout<<"第"<<i+1<<"个元素是"<<m_elem[i]<<endl; }}template<classT>voidTSeqList<T>::input(){ cout<<"开始建立顺序表,输入元素个数〔≤"<<m_maxsize<<"〕:"; cin>>m_len; boola=true; while(a) { if(m_len>m_maxsize) { cout<<"元素个数已经超过"<<m_maxsize<<"!"<<endl; cout<<"重新输入元素个数〔≤"<<m_maxsize<<"〕:"; cin>>m_len; } elsea=false; } for(inti=0;i<m_len;i++) {cout<<i+1<<" ";cin>>m_elem[i];}}其他主要算法的实现菜单输出函数文件cmain.h文件:#include<iostream>usingnamespacestd;voidcmain() //主界面的菜单函数{ cout<<"***********************************"<<endl; cout<<"主菜单"<<endl; cout<<"1.输入数据元素2.输出数据元素"<<endl; cout<<"3.按元素查找4.按位置查找"<<endl; cout<<"5.插入元素6.删除元素"<<endl; cout<<"7.现有数据个数8.数组总长度"<<endl; cout<<"9.清空列表0.退出程序"<<endl; cout<<"注意:1.选择时不能输入过多字符〔<20个〕"<<endl; cout<<"2.选择时只读取第一个字符"<<endl; cout<<"***********************************"<<endl; cout<<"请输入选项〔1~9〕:";}主程序的实现cmain.cpp文件:#include"list.h"#include"cmain.h"#include<iostream>usingnamespacestd;voidmain(){ cout<<" 欢送使用该顺序表程序!"<<endl<<endl; TSeqList<char>str; chari[20]; boola=true; while(a) //循环结构进行各项操作 { cmain(); cin>>i; switch(i[0]) { case'1':str.input();break; //输入数据 case'2':str.output();break; //输出数据 case'3':str.Search1();break; //按照元素查找元素 case'4':str.Search2();break; //按照位置查找元素 case'5':str.Insert();break; //插入数据 case'6':str.del();break; //删除数据 case'7':str.Length();break; //输出数组现有数据量 case'8':str.Size();break; //输出数组的最大容量 case'9':str.SeqEmputy();break; //清空数据列表 case'0':a=false;break; //退出程序 default:cout<<"输入错误!无此选项,请重新输入!"<<endl;//输入错误指令,报错! } } }测试结果列出几组输入和输出结果,输入集应多于需求分析的数据。1〕、翻开程序后,先输入所要创立数组的容量:2〕、然后就可以选择各种功能按钮了,可以输入0~9选项〔只读取第一个字符〕:3〕、假设输入错误,会给出提示且可以重新输入〔这里输入的是qwer〕4〕、当输入1时,会要求输入您所要输入的元素的个数〔这里

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论