15-7-22 Oj-更换火车头

来源:互联网 发布:重庆办公软件培训班 编辑:程序博客网 时间:2024/06/06 03:49

问题及代码:

/**  问题:*  假设火车有n节车厢(从前往后编号依次为1,2,3,...,n),每节车厢的人数依次为M1,M2,M3,...,Mn。*  火车头的编号为0,连接在1号车厢上。火车进站后,将火车头从1号车厢卸下,接在第n节车厢上,反方向行驶。*  即火车的1号车厢为原来的第n号车厢,...,火车的n号车厢为原来的第1号车厢。请输出火车反向行驶后,每节车厢的人数。*/#include <iostream>#include <windows.h>using namespace std;struct Train {    int num;  //人数    Train *next;};/**********************************************************************功能描述:往车厢里面装人,用了简单的递归算法实现反复输入。            使用了静态变量,目的是重复调用函数时不取消变量的值*输入参数:整型变量,代表车厢数*输出参数:Train类的指针变量,最终返回的代表车头(第0节车厢)的地址*********************************************************************/Train *creat(int n){    static int i=0;    if(i==0)        {            cout<<"请输入车头人数:";            i++;        }    else        cout<<"请输入车厢"<<i++<<"人数:";    Train *t=new Train;    cin>>t->num ;    if(n==1) {        t->next = NULL;        return t;    }    t->next = creat(n-1);    return t;}/***************************************************************功能描述:输出每节车厢的人数信息*输入参数:Train类的指针变量,代表车头的地址,从车头开始输出*输出参数:Train的指针变量,最终返回的代表车头的地址*************************************************************/void print(Train *p){    static int i=0;    if(p==NULL)        return ;    if(i==0)        {            cout<<"车头人数:"<<p->num<<endl;            i++;        }    else        cout<<"车厢"<<i++<<"人数:"<<p->num<<endl;    print(p->next);}/***************************************************************功能描述:删除每节车厢因为输入人数时动态分配的内存空间*输入参数:Train类的指针变量,代表车头的地址,从车头开始删除*输出参数:无**************************************************************/void del(Train *p){    if(p==NULL)        return ;    Train *t;    t=p->next;    delete p;    del(t);}/**************************************************************功能描述:将车头调转到车尾,将车头逐个和下一节车厢调换位置*输入参数:Train类的指针变量,代表车头的地址。*输出参数:无*************************************************************/Train *rev(Train *p){    Train *head=NULL,*t;    while(p){        t=p->next;        p->next = head;        head = p;        p=t;    }    return head;}int main(void){    int j;    int n;    Train *head;    Train *rev(Train *p);    cout<<"请输入车厢数:";    cin>>n;    head = creat(n);    head=rev(head);    cout<<"车头调转中";    for(j=0;j<7;j++)    {        cout<<'.';        Sleep(150);    }    cout<<endl;    cout<<"车头调转后,各车厢人数为:"<<endl;    print (head);    del(head);    return 0;}


运行结果:


小结:

和最近做的链表感觉很像。

因为明天考试去Oj刷了下题,前面都挺顺利,就这题,卡了我半小时,一直想搞明白他写的那些函数都是什么意思。

在几次反复看了之后终于明白,加了一条p=t语句程序就成了,感觉这题不错,应该发一下博客。

加油~

0 0
原创粉丝点击