定义结构体:
typedef struct flight //航班信息
{
char number[50]; //航班号
char staddress[50]; //起点站
char arraddress[50]; //终点站
char DATE[20]; //班期
char TYPE[20]; //机型
int stime; //起飞时间
int atime; //到达时间
int value; //票价
}datatypetypedef struct node
{
datatype data;
struct node *prev;
struct node *next;
}node;
排序:
void sort(pnode h)
{
//头结点为空/表为空/只有一个结点时不用排序
if(!h || h->next == h || h->next->next == h){
return;
}
pnode p,q,t;
//从h->next->next开始遍历,t及t前面的都是排好序的,p是本轮待插入值,等于h时结束
for(t=h->next,p=t->next;p!=h;p=t->next){
//从h->next开始遍历,等于t结束
for(q=h;q!=t;q=q->next){
//插入后结束本次遍历
if(p->data.stime < q->next->data.stime){
t->next = p->next;
p->next->prev = t;
//把p结点插入到q->next前面,即q的后面
p->next = q->next;
q->next->prev = p;
q->next = p;
p->prev = q;
break;
}
}
if(t == q){ //在t前面没有插入,就下移
t = t->next;
}
#if 0
else{ //p已经处于插入位置
printf("插入到%s的前面\n",p->next->data.number);
}
#endif
}
}
查找:(查找可参考单向链表,需注意字符串比较时不能用 == ,要用strcmp函数!)
//根据终点站查找数据
bool search_arr(pnode h,char *key)
{
int hour,min;
char start[10],end[10];
pnode p=h;
for(p=h->next; p!= h;p=p->next){//strcmp(str1,str2) 函数用于比较两个字符串
结果=0则str1=str2
结果>0则str1>str2
结果<0则str1<str2
//字符串比较的是地址,所以不能用 key == p->data.arraddress来比较
if(strcmp(key,p->data.arraddress) ==0){
hour=p->data.stime / 60;
min=p->data.stime % 60;
sprintf(start,"%d:%d",hour,min);
hour=p->data.atime / 60;
min=p->data.atime % 60;
sprintf(end,"%d:%d",hour,min);printf("%s %s %s %s %s %s %s %d元\n",p->data.number,p->data.staddress,p->data.arraddress,p->data.DATE,p->data.TYPE,start,end,p->data.value);
return true;
}
}
}
补充:
1.字符串转int
char str[20] = "10:20";
int h,m;sscanf(str,"%d:%d",&h,&m); //将字符串转为不同类型数据
printf("%s转换为整数时间为:%d:%d\n",str,h,m);
2.int转字符串
char str[20];
int h,m;
int a;
h = 11;
m = 34;sprintf(str,"%d:%d",h,m); //将不同类型数据转为字符串
printf("%s\n",str);