首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

麻烦大家帮小弟我看看这个简单的双向链表错在哪里了

2012-03-12 
麻烦大家帮我看看这个简单的双向链表错在哪里了是做个简单的订票系统的,其中结点按乘客的姓氏字母顺序相链

麻烦大家帮我看看这个简单的双向链表错在哪里了
是做个简单的订票系统的,其中结点按乘客的姓氏字母顺序相链。我写的代码如下,但是显示的时候只会显示最后一个订票人的信息,为什么呢?要怎么才能改正?谢谢


//***********************************************************************
#include <iostream.h>
#include <string.h>

struct   p_new  
{
char   b[20];   //储存名字

int   n   ;   //储存票数

struct   p_new   *   prior;
struct   p_new   *   next;

};
p_new   *head,*f,*p;

void   p_insert(   p_new   *p     )     //用于新加订票
{
p_new   *   f   =   head   ;

if   (   head   ==   NULL   )//判断链表是否为空
{
head   =   p   ;
p   ->   prior   =   head   ;
p   ->   next   =   NULL;

}
else   if   (     f   !=   NULL     )
{
p   ->   prior   =   f   ;
f   ->   next   =   p   ;
p   ->   next   =   NULL;
}
else
{
do
{
aa:if(strcmp   (   f   ->   b   ,   p   ->   b)   > 0   )//比较字母先后,f所指的较后的话,p插在f前
{
p   ->   next   =   f   ;
p   ->   prior   =   f   ->   prior   ;
f   ->   prior   ->   next   =   p   ;
f   ->   prior   =   p   ;
}
else  
{
f=f-> next;
goto   aa;
}
}while(   f   ->   next   !=   NULL   );
}

}


void   p_show()//用于显示链表的信息
{
p_new   *   t   =   head   ;

if   (   t   ==   NULL   )//判断链表是否为空
{cout   < <     "错误!现在还没有人订票! " < <   endl;   }

else
{  
do
{cout   < <   "姓名 "   < <   '\t '   < <   "所订票数 "   < <   endl;
cout   < <   t   ->   b   < <   '\t '   < <   t   ->   n   < <   endl;
t   =   t   ->   next;
}while(     t   !=   NULL   );
}
}

void   getinfo(p_new   *p)//获取新订票的信息
{
cout   < <   "请输入您的名字: "   < <   endl;
cin   > >   p   ->   b   ;
cout   < <   "请输入您想订的票数: "   < <   endl;
cin   > >   p   ->     n   ;
p   ->   prior   =   NULL;
p   ->   next   =   NULL;
}

void   main()
{head   =   NULL;
p   =   new   p_new;
p   ->   prior   =   NULL   ;
p   ->   next   =   NULL   ;
int   n   ;
again:
cout   < <   "请输入您要进行的操作: "   < <   endl;
cout   < <   "1.订票 "   < <   '\t '   < <   "2.查看现在的订票名单 "   < <   endl;
cin   > >   n   ;
switch   (n)


{
case   1   :getinfo(p);
p_insert(   p   );break;
case   2   :   p_show();break;
default:   cout   < <   "输入错误,请重新输入! "   < <   endl;goto   again;
}
cout   < <   "操作成功!还要其他操作吗? "   < <   endl;
here:cout   < <   "1.是 "   < <   '\t '   < <   "2.否 "   < <   endl;
cin   > >   n   ;
switch   (n)
{
case   1   :   goto   again;
case   2   :   break;
default:   cout   < <   "输入错误,请重新输入! "   < <   endl;goto   here;
}
}

//***********************************************************************

[解决办法]
你的P_insert里面的第二else是不可能跑到的,错误就在p_insert里面。
[解决办法]
来晚了
[解决办法]
head ,没有分配内存啊。
[解决办法]
更晚了

热点排行