算法与数据结构课程中的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;}


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

原创粉丝点击