.[題目分析] 本題所用數據結構是靜態雙向鏈表其結構定義為
typedef struct node
{char data[maxsize];∥用戶姓名maxsize是可能達到的用戶名的最大長度
int LlinkRlink;∥前向後向鏈其值為乘客數組下標值
}unode;
unode user[max];∥max是可能達到的最多客戶數
設av是可用數組空間的最小下標當有客戶要訂票時將其姓名寫入該單元的data域然後在靜態鏈表中查找其插入位置將該乘客姓名與鏈表中第一個乘客姓名比較根據大於或小於第一個乘客姓名而決定沿第一個乘客的右鏈或左鏈去繼續查找直到找到合適位置插入之
void Insert(unode user[max]int av)∥user是靜態雙向鏈表表示飛機票訂票系統元素包含dataLlink和Rlink三個域結點按來客姓名排序本算法處理任一乘客訂票申請
{scanf(%ss);∥s是字符數組存放乘客姓名
strcopy(user[av]datas);
p=;∥p為工作指針(下標)
if(strcmp(user[p]datas)<)∥沿右鏈查找
{while (p!= && strcmp(user[p]datas)<){pre=p; p=user[p]Rlink; }
user[av]Rlink=p;user[av]Llink=pre;∥將新乘客鏈入表中
user[pre]Rlink=av; user[p]Llink=av;
}
else∥沿左右鏈查找
{while (p!= && strcmp(user[p]datas)>){pre=p; p=user[p]Llink; }
user[av]Rlink=pre;user[av]Llink=p;∥將新乘客鏈入表中
user[pre]Llink=av; user[p]Rlink=av;
}
}∥算法結束
[算法討論] 本算法只討論了乘客訂票情況未考慮乘客退票也未考慮從空開始建立鏈表增加乘客時也未考慮姓名相同者(實際系統姓名不能做主關鍵字)完整系統應有()初始化把整個數組空間初始化成雙向靜態鏈表全部空間均是可利用空間()申請空間當有乘客購票時要申請空間直到無空間可用為止()釋放空間當乘客退票時將其空間收回由於空間使用無優先級故可將退票釋放的空間作為下個可利用空間鏈入可利用空間表中
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/sjjg/201311/23314.html