读书人

麻烦大家帮小弟我看看这个简单的双向链

发布时间: 2012-03-12 12:45:33 作者: rapoo

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


//***********************************************************************
#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 ,没有分配内存啊。
[解决办法]
更晚了

读书人网 >C++

热点推荐