#include
#include
using namespace std;
class Node
{
public:
int seat;
string name;
Node *link; //指向后继指针的结点
Node()
{
seat = 0;
link = NULL;
}
Node(const int m)
{
seat = m;
link = NULL;
}
};
class Passenger
{
public:
Node *head, *tail; //表头和表尾指针
Passenger()
{
head = tail = NULL;
}
void clear();
void PreTicket();//预定机票
void Sort();
void delTicket(int a);//删除机票 (输入姓名)
bool findTicket(const int value);//查找是否预定
void printList(); //输出链表
~Passenger()
{
clear();
}
};
void Passenger::Sort()
{
Node *p,*q;
p=head->link;
q=p->link;
while(p!=NULL)
{
if(p->name>q->name)
{
int t;
string temp;
t=p->seat,p->seat=q->seat,q->seat=t;
temp=p->name,p->name=q->name,q->name=temp;
}
p=p->link;
q=q->link;
}
}
void Passenger::printList()
{
Node* p = this->head->link;
while (p != NULL) {
cout << p->seat << " "<<p->name<<endl;
p = p->link;
}
cout << endl;
}
void Passenger::PreTicket()//预定机票
{
Node* s = new Node;
Node* p;
this->head = s;
this->tail = s;
this->tail->link = NULL;
cout << "输入以 0 为结束" << endl;
int sit;
string n;
cout<<"请输入姓名";
cin >> n;//姓名
cout<<"请输入座位号" ;
cin>>sit;//座位号
while (sit != 0 && sit!= '0') //输入为0时,链表构建结束
{
p=new Node;
p->seat=sit;
p->name=n;
p->link=s->link;
s->link=p;
s=p;
cout<<"请输入姓名";
cin >> n;//姓名
cout<<"请输入座位号" ;
cin>>sit;//座位号
}
}
void Passenger:: delTicket(int a)//删除机票 (输入座位号)
{
Node *p,*q,*t,*pre;
pre=head;
p=head->link;
while(p!=NULL)
{
if(p->seat==a)
{
t=p->link;
pre->link=t;
p=t;
}
else
{
pre=p;
p=p->link;
}
}
}
bool Passenger:: findTicket(const int value)//
{
//int count=0;
Node *p=head->link;
while(p!=NULL)
{
if(p->seat!=value)
{
p=p->link;
//count++;
}
else
{
cout<<"已被预订" <<endl;
cout<<p->name<<" "<<p->seat<<endl;
return true;
}
}
cout<<"未被预定"<<endl;
return false;
}
void Passenger::clear()
{
Node* p;
while (head != NULL) {
p = this->head;
head = this->head->link;
delete p;
}
head = tail = NULL;
}
int main()
{
Passenger l;
l.PreTicket();//订票
l.Sort();
l.printList();
int sit;
cin>>sit;
l.findTicket(sit);//查找是否预定
l.delTicket(sit);//删除
l.printList();//显示
return 0;
}