您的位置:首页 > 理论基础 > 数据结构算法

算法与数据结构课程中的c++实现的顺序表和链表

2020-02-07 09:00 525 查看

呵呵,老师布置的作业,自己写的奥!

顺序表:

#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; }


以上的代码比较简陋,希望给大家指教。

转载于:https://www.cnblogs.com/lcqBlogs/archive/2011/09/16/2392393.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
baihuanbaiv55389 发布了0 篇原创文章 · 获赞 0 · 访问量 410 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: