算法与数据结构课程中的c++实现的顺序表和链表
来源:互联网 发布:电脑屏幕扫描软件 编辑:程序博客网 时间:2024/05/22 12:34
呵呵,老师布置的作业,自己写的奥!
顺序表:
#include <iostream>#include <string>using namespace std;struct Data{int stationNum; string name;string time;int personUpNum;int personDownNum;Data * next;};Data* LinkedlistInit() //初始化一个站点{ Data * L = new Data; if (L == NULL) {cout <<"没有足够的内存空间!"<<endl; }L->next = NULL;return L;}int LinkedListLength(Data * L) //求总站数{Data * p = new Data;p = L->next;int j = 0;while(p){ j++; p = p->next;} return j;}int LinkedListupPerson(Data * L) //求总上车人数{Data * p = new Data;p = L->next;int j = 0;while(p){j += p->personUpNum ;p = p->next;} return j;}Data * LinkedListInsert(Data * L,Data * p,Data e) //插入新的站点{ Data * pre = new Data;pre = L;while (pre && pre->next!=p){pre = pre->next;}if (!pre){cout <<"不存在*p结点!"<<endl;exit(0);}Data * s= new Data;s->name = e.name;s->time = e.time;s->stationNum = e.stationNum;s->personUpNum = e.personUpNum;s->personDownNum = e.personDownNum;s->next = pre->next;pre->next = s;return L;}Data * LinkedListDel(Data * L,string name) //删除一个站点{if (L->next == NULL){cout <<"空表!"<<endl;} Data * pre = new Data;pre = L;while (pre->next && pre->next->name != name){pre = pre->next;}if (pre->next==NULL){cout <<"不存在该站名!"<<endl;exit(0);}Data * s= new Data; s = pre->next;pre->next = s->next;delete(s);return L;}void Listtraversal(Data * L) //遍历List{ Data * p = new Data;p = L;while(p != NULL){cout <<"号码 :"<<p->stationNum<<endl;cout <<"站名 :"<<p->name<<endl;cout <<"到达时间 :"<<p->time<<endl;cout <<"上车人数 :"<<p->personUpNum<<endl; cout <<"下车人数 :"<<p->personDownNum<<endl;p = p->next;}}string ListgetTime(Data * L , string name) //根据站名得到时间{Data * p = new Data;p = L->next;while(p->name != name){p = p->next;}if (p != NULL){ return p->time;}else{cout <<"没有该站!"<<endl;exit(0);}}void ListgetprebyName(Data * L , string name) //根据站名得到前一个站{Data * p = new Data;Data * q = new Data;q = L;p = L->next;while(p->name != name){p = p->next;q = q->next;}if (p != NULL && q != L){ cout <<"前一个站为:"<<q->name<<endl;}else{cout <<"没有该站!"<<endl;}}void ListgetafterbyName(Data * L , string name) //根据站名得到后一个站{Data * p = new Data;p = L->next;while(p->name != name){p = p->next;}if (p != NULL && p->next != NULL){ cout <<"后一个站为:"<<p->next->name<<endl;}else{cout <<"没有该站!"<<endl;}}int main(){Data a;a.name = "烟台大学";a.time = "7";a.personUpNum = 32;a.personDownNum = 0;a.stationNum = 1;Data b;b.name = "工商学院";b.time = "8";b.personUpNum = 12;b.personDownNum = 22;b.stationNum = 2;Data c;c.name = "清泉路";c.time = "9";c.personUpNum = 2;c.personDownNum = 4; c.stationNum = 3;Data * header= new Data;header = LinkedlistInit();LinkedListInsert(header,header->next,a);LinkedListInsert(header,header->next,b);LinkedListInsert(header,header->next,c);cout <<LinkedListLength(header)<<endl;Listtraversal(header->next);cout <<"总的上车人数 :"<<LinkedListupPerson(header)<<endl;cout <<"根据name得到time :"<<ListgetTime(header,"烟台大学")<<endl;ListgetprebyName(header,"工商学院");ListgetprebyName(header,"清泉路");ListgetprebyName(header,"烟台大学");ListgetafterbyName(header,"工商学院");ListgetafterbyName(header,"清泉路");ListgetafterbyName(header,"烟台大学");LinkedListDel(header,"烟台大学"); Listtraversal(header->next);}
链表:
#include <iostream>#include <string>using namespace std;struct Data{int stationNum; string name;string time;int personUpNum;int personDownNum;};class list{public:int max; static int length; Data * data;Data * p;list(int m); void initList(int st, string n, string t, int pu, int pd); //初始化一个站并且插入void deleteList(string n); //删除一个站点 static int getLength(); //求总站数 int getpersonall(); //总上车人数void getinformation(); //遍历各站(站名、到达时间、上下车人数) string getTimebyname(string n); //查找第i站,根据站名查找到达该站的时间void getprebystationName(string n); //已知某站,求该站的前一站void getafterbystationName(string n); //已知某站,求该站的后一站};int list::length = 0;int list::getLength(){ return length;}void list::getprebystationName(string n){int len = 0;if (length == 0){cout <<"空表!"<<endl;return;}data = p;while(data->name != n){if (len >= (length-1)){break;}data++;len++;}data--; try { cout <<"号码 :"<<data->stationNum<<endl; cout <<"站名 :"<<data->name<<endl; cout <<"到达时间 :"<<data->time<<endl; cout <<"上车人数 :"<<data->personUpNum<<endl; cout <<"下车人数 :"<<data->personDownNum<<endl;} catch(int){cerr<<"error!";}catch(string){cerr<<"error!";} catch(Data *){cerr<<"error!";} catch(...){cerr<<"查找的表中没有该站!"<<endl;}}void list::getafterbystationName(string n){int len = length;data = p;while(data->name !=n){if (len <= 0){break;}data++;len--;}if (len = 0){cout <<"查找的表中没有该站名!"<<endl;return ;}data++;if (data++){try{ cout <<"号码 :"<<data->stationNum<<endl;cout <<"站名 :"<<data->name<<endl;cout <<"到达时间 :"<<data->time<<endl;cout <<"上车人数 :"<<data->personUpNum<<endl;cout <<"下车人数 :"<<data->personDownNum<<endl;} catch(...){cerr<<"查找的表中没有该站!"<<endl;}}}string list::getTimebyname(string n){ int len = length;data = p;while(len > 0 ){if (data->name ==n){break;}data++;len--;}return data->time;}void list::getinformation(){int len = length;data = p;while(len > 0){cout <<"号码 :"<<data->stationNum<<endl;cout <<"站名 :"<<data->name<<endl;cout <<"到达时间 :"<<data->time<<endl;cout <<"上车人数 :"<<data->personUpNum<<endl;cout <<"下车人数 :"<<data->personDownNum<<endl;data++;len--;}}int list::getpersonall(){int personNumbers = 0; int len = length;data = p;while (len >= 1){personNumbers+=data->personUpNum; data++; len--;}return personNumbers;}list::list (int m){ this->max = m; data = new Data[max];p = data;}void list::initList(int st, string n, string t, int pu, int pd){if (length == max + 1){cout <<"插入的表满!"<<endl;return;}if (st < 0|| st > max){cout <<"插入位置出错!"<<endl;return;}if (length == 0){data = data + st;data->stationNum = st;data->name = n;data->time = t;data->personUpNum = pu;data->personDownNum = pd; length++;}else{int j = length;for (; j > st;j--){data[j].stationNum = data[j-1].stationNum;data[j].name = data[j-1].name;data[j].time = data[j-1].time;data[j].personUpNum = data[j-1].stationNum;data[j].personDownNum = data[j-1].personDownNum;}data[j].stationNum = st;data[j].name = n;data[j].time = t;data[j].personUpNum = pu; data[j].personDownNum = pd; length++;}}void list::deleteList(string n){int len = 0;if (length == 0){cout <<"删除的为空表!"<<endl;return;}data = p;while(data->name != n){if (len >= (length-1)){break;}data++;len++;}if (len >= (length-1)){cout <<"当前要删除的表中没有该站名!"<<endl;return ;}else{ data = p;while(len <(length - 1)){data[len].stationNum = data[len+1].stationNum;data[len].name = data[len+1].name;data[len].time = data[len+1].time;data[len].personUpNum = data[len+1].stationNum;data[len].personDownNum = data[len+1].personDownNum;len++;} length--;}}int main(){ list list1(5); list1.initList(0,"南寨","6",12,4); list1.initList(1,"烟台大学","7",45,8);list1.initList(3,"滨州医学院","9",7,21);list1.initList(2,"工商学院","8",8,43);list1.initList(2,"烟台山医院","4",4,1); cout <<"length :"<<list1.getLength()<<endl;cout <<"allnum :"<<list1.getpersonall()<<endl; cout <<"遍历输出信息:"<<endl;list1.getinformation(); cout <<"length :"<<list1.getLength()<<endl;cout <<"根据name找出time :"<<list1.getTimebyname("烟台大学")<<endl;cout <<"已知某站,求该站的前一站"<<endl;list1.getprebystationName("南寨");cout <<"已知某站,求该站的前一站"<<endl;list1.getprebystationName("烟台大学");cout <<"已知某站,求该站的后一站"<<endl;list1.getafterbystationName("滨州医学院");cout <<"已知某站,求该站的后一站"<<endl;list1.getafterbystationName("烟台山医院"); cout <<"删除一个站点"<<endl; list1.deleteList("工商学院");cout <<"遍历输出信息:"<<endl;list1.getinformation();cout <<"length :"<<list1.getLength()<<endl; cout <<"删除一个站点"<<endl; list1.deleteList("月亮湾");return 0;}
以上的代码比较简陋,希望给大家指教。
- 算法与数据结构课程中的c++实现的顺序表和链表
- C语言实现数据结构中的顺序表
- Java实现数据结构与算法-顺序表
- 数据结构课程要求算法-顺序链表(创建)
- Java数据结构与算法 顺序表的实现
- 《数据结构与算法分析》—栈的链表和数组实现(C语言)
- 数据结构与算法分析c++:STL中的向量和表
- 数据结构(C++)顺序表的实现
- 数据结构的C实现_顺序表
- [c语言]数据结构 顺序表的实现
- 算法与数据结构 其二 数组和链表 的实现
- 数据结构与算法--顺序表
- 【数据结构】C语言实现顺序链表
- 数据结构---顺序表c实现
- 数据结构-----顺序表与单链表的实现
- 【数据结构】线性表的顺序表示和实现,实现插入和删除算法,并且实现顺序表的合并
- 《数据结构、算法与应用》9.(C++实现顺序表)
- 数据结构算法代码实现——线性表的顺序表示与实现(二)
- iBatis的配置文件setting
- Oracle ORA-01045错误解决方法
- SQL Server 动态SQL使用(处理输入和输出变量)
- 读故事悟人生
- 索引(转自http://blog.163.com/owx8012@126/blog/static/3844624620099152102133/)
- 算法与数据结构课程中的c++实现的顺序表和链表
- 为什么总抛出空指针异常,请各位大师帮我改进一下,我将不胜感激
- windows 7 welcome screen twicks
- 操作系统概念辨析
- .bash_profile & .bashrc
- 能否手工安装Win7的NVIDIA显卡驱动到XP
- minix3安装ssh服务
- VB.NET 串口访问之一
- 查询系统是否安装了JDK