typedef struct CNode { char name[20];//姓名 int num;//订票数 char ID[20];//身份证 char day[20];//飞行日期 int dengji;//舱等级 CNode *next; } CNode, *CList;//乘客节点 typedef struct HbNode { char name[20];//姓名 char ID[20]; //身份证 int num;//预定数量 struct HbNode *next; } QhbNode, *Phb;//候补队列中的节点 typedef struct Queue { Phb front;//等候替补客户名单域的头指针 Phb rear;//等候替补客户名单域的尾指针 } LinkQueue;//候补队列 typedef struct Cxinxi{ char name[20];//姓名 char ID[20]; //身份证 char day[20]; int num;//订票量 } Cxinxi;//封装乘客的姓名和订票量和身份证,用于候补客户出队时把关键字返回 typedef struct hangban { char qidian[20];//起点站名 char zhongdian[20];//终点站名 char hbID[20];//航班编号 char hbnum[20];//飞机号 char day[20];//飞行日期(星期几) int maxnum;//总票数 int less;//总余票量 int lessgrade1; //等级1剩余量 int lessgrade2; //等级2剩余量 hangban *next; CList cusLinkList;//乘员名单域,指向乘员名单链表的头指针 LinkQueue wQgrade1;//等级1候补,等候替补的客户名单域,指向一个队列 LinkQueue wQgrade2;//等级2候补,等候替补的客户名单域,指向一个队列 } hangban, hangbanNode, *Phangban;//航班节点 该段代码的存储结构是什么
时间: 2023-09-16 17:10:11 浏览: 103
该段代码的存储结构是一组结构体,包括CNode(乘客节点)、QhbNode(候补队列中的节点)、LinkQueue(候补队列)、Cxinxi(乘客信息)、hangban(航班节点)。其中,CNode和QhbNode都是链表节点,LinkQueue是链式队列,Cxinxi是一个封装结构体,hangban是一个包含链表和队列的复合结构体。
相关问题
typedef struct { int credit; // 学分 int usual_score;//平时成绩 int exp_score;//实验成绩 int paper_score;//卷面成绩 float final_score;//综合成绩 float real_credit;//实得学分 char course_id[3]; // 课程编号 char course_name[10]; // 课程名称 }grade; typedef struct { char student_id[2]; // 学号 char name[10]; // 姓名 char gender; // 性别 int dorm_num; // 宿舍号码 long phone_num; //电话号码 grade data[MAX]; }student; typedef struct { student data[MAX];//数据域 int length;//表长 }Seqlist;
这是一段定义了三个结构体的代码。其中,`grade`结构体包含了学生课程的成绩信息,包括学分、平时成绩、实验成绩、卷面成绩、综合成绩、实得学分、课程编号以及课程名称。`student`结构体包含了学生的个人信息,包括学号、姓名、性别、宿舍号码、电话号码以及该学生的所有课程成绩信息。`Seqlist`结构体定义了一个顺序表,其中数据域是一个`student`结构体数组,表长由`length`字段表示。可以通过访问顺序表的下标来获取每个学生的信息。
//乘客节点 typedef struct CustomerNode { char name[10];//客户姓名 int clientTickets;//客户订票量 char identification[20];//客户身份证号码 int rank;//座位等级 CustomerNode *next; } CustomerNode, *CusLinkList; //候补队列中的节点 typedef struct WaitPassenger { char name[10];//姓名 char identification[20]; //身份证 int preTickets;//预定的票量 struct WaitPassenger *next; } WaitQNode, *PWait; typedef struct CusLinkList2{ CusLinkList head;//头指针 int count;//链表长度 } CusLinkList2; //候补队列 typedef struct Queue { PWait front;//等候替补客户名单域的头指针 PWait rear;//等候替补客户名单域的尾指针 } LinkQueue; //封装乘客的姓名和订票量和身份证 //用于候补客户出队时把关键字返回 typedef struct NameAndNumAndID { char name[10];//姓名 char identification[20]; //身份证号码 int num;//订票量 } NameAndNumAndID; //车次节点 typedef struct Flight { char startPoint[20];//起点站名 char destination[20];//终点站名 char flightCodeID[20];//车次ID(相当于主键) char planeNum[20];//列车号 char day[20];//出发日期(星期几) int totalTickets;//乘员定额(总票数) int left;//总余票量 int leftEconomicTicket; //二等座剩余量 int leftBusinessTicket; //一等座剩余量 Flight *next; CusLinkList cusLinkList;//乘员名单域,指向乘员名单链表的头指针 LinkQueue waitQueue1;//二等座候补,等候替补的客户名单域,指向一个队列 LinkQueue waitQueue2;//一等座候补,等候替补的客户名单域,指向一个队列 } Flight, FlightNode, *PFlight;用c语言实现该结构体的文件读取操作,并写出具体代码
假设我们需要从一个名为"flight.txt"的文件中读取Flight结构体的信息,以下是具体的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100 //最大行长
//乘客节点
typedef struct CustomerNode {
char name[10];//客户姓名
int clientTickets;//客户订票量
char identification[20];//客户身份证号码
int rank;//座位等级
CustomerNode *next;
} CustomerNode, *CusLinkList;
//候补队列中的节点
typedef struct WaitPassenger {
char name[10];//姓名
char identification[20]; //身份证
int preTickets;//预定的票量
struct WaitPassenger *next;
} WaitQNode, *PWait;
typedef struct CusLinkList2{
CusLinkList head;//头指针
int count;//链表长度
} CusLinkList2;
//候补队列
typedef struct Queue {
PWait front;//等候替补客户名单域的头指针
PWait rear;//等候替补客户名单域的尾指针
} LinkQueue;
//封装乘客的姓名和订票量和身份证
//用于候补客户出队时把关键字返回
typedef struct NameAndNumAndID {
char name[10];//姓名
char identification[20]; //身份证号码
int num;//订票量
} NameAndNumAndID;
//车次节点
typedef struct Flight {
char startPoint[20];//起点站名
char destination[20];//终点站名
char flightCodeID[20];//车次ID(相当于主键)
char planeNum[20];//列车号
char day[20];//出发日期(星期几)
int totalTickets;//乘员定额(总票数)
int left;//总余票量
int leftEconomicTicket; //二等座剩余量
int leftBusinessTicket; //一等座剩余量
Flight *next;
CusLinkList cusLinkList;//乘员名单域,指向乘员名单链表的头指针
LinkQueue waitQueue1;//二等座候补,等候替补的客户名单域,指向一个队列
LinkQueue waitQueue2;//一等座候补,等候替补的客户名单域,指向一个队列
} Flight, FlightNode, *PFlight;
//从文件中读取一行数据
char* readLine(FILE* fp) {
char* line = (char*)malloc(MAX_LEN * sizeof(char));
if (!line) {
perror("Memory allocation failed!");
exit(1);
}
if (fgets(line, MAX_LEN, fp) == NULL) {
free(line);
return NULL;
}
int len = strlen(line);
if (len > 0 && line[len - 1] == '\n') {
line[len - 1] = '\0';
}
return line;
}
//从文件中读取一个Flight结构体的信息
PFlight readFlightFromFile(FILE* fp) {
char* line;
PFlight flight = (PFlight)malloc(sizeof(FlightNode));
if (!flight) {
perror("Memory allocation for flight failed!");
exit(1);
}
flight->cusLinkList.head = NULL;
flight->waitQueue1.front = flight->waitQueue2.front = NULL;
flight->waitQueue1.rear = flight->waitQueue2.rear = NULL;
flight->next = NULL;
while ((line = readLine(fp)) != NULL) {
if (strncmp(line, "startPoint:", 11) == 0) {
strcpy(flight->startPoint, line + 11);
}
else if (strncmp(line, "destination:", 12) == 0) {
strcpy(flight->destination, line + 12);
}
else if (strncmp(line, "flightCodeID:", 13) == 0) {
strcpy(flight->flightCodeID, line + 13);
}
else if (strncmp(line, "planeNum:", 9) == 0) {
strcpy(flight->planeNum, line + 9);
}
else if (strncmp(line, "day:", 4) == 0) {
strcpy(flight->day, line + 4);
}
else if (strncmp(line, "totalTickets:", 13) == 0) {
flight->totalTickets = atoi(line + 13);
flight->left = flight->totalTickets;
}
else if (strncmp(line, "left:", 5) == 0) {
flight->left = atoi(line + 5);
}
else if (strncmp(line, "leftEconomicTicket:", 19) == 0) {
flight->leftEconomicTicket = atoi(line + 19);
}
else if (strncmp(line, "leftBusinessTicket:", 19) == 0) {
flight->leftBusinessTicket = atoi(line + 19);
}
else if (strncmp(line, "cusLinkList:", 12) == 0) {
//读取乘员名单域
CusLinkList cusList = &flight->cusLinkList;
cusList->count = 0;
while ((line = readLine(fp)) != NULL && strncmp(line, "waitQueue1:", 11) != 0 && strncmp(line, "waitQueue2:", 11) != 0) {
CustomerNode* cus = (CustomerNode*)malloc(sizeof(CustomerNode));
if (!cus) {
perror("Memory allocation for customer failed!");
exit(1);
}
sscanf(line, "%s %d %s %d", cus->name, &cus->clientTickets, cus->identification, &cus->rank);
cus->next = cusList->head;
cusList->head = cus;
cusList->count++;
}
if (line != NULL && strncmp(line, "waitQueue1:", 11) == 0) {
//读取二等座候补队列
LinkQueue* queue = &flight->waitQueue1;
while ((line = readLine(fp)) != NULL && strncmp(line, "waitQueue2:", 11) != 0) {
PWait waitNode = (PWait)malloc(sizeof(WaitQNode));
if (!waitNode) {
perror("Memory allocation for wait passenger failed!");
exit(1);
}
sscanf(line, "%s %s %d", waitNode->name, waitNode->identification, &waitNode->preTickets);
waitNode->next = NULL;
if (queue->front == NULL) {
queue->front = waitNode;
}
else {
queue->rear->next = waitNode;
}
queue->rear = waitNode;
}
}
if (line != NULL && strncmp(line, "waitQueue2:", 11) == 0) {
//读取一等座候补队列
LinkQueue* queue = &flight->waitQueue2;
while ((line = readLine(fp)) != NULL) {
PWait waitNode = (PWait)malloc(sizeof(WaitQNode));
if (!waitNode) {
perror("Memory allocation for wait passenger failed!");
exit(1);
}
sscanf(line, "%s %s %d", waitNode->name, waitNode->identification, &waitNode->preTickets);
waitNode->next = NULL;
if (queue->front == NULL) {
queue->front = waitNode;
}
else {
queue->rear->next = waitNode;
}
queue->rear = waitNode;
}
}
}
}
return flight;
}
//从文件中读取多个Flight结构体的信息
PFlight readFlightsFromFile(char* fileName) {
FILE* fp = fopen(fileName, "r");
if (!fp) {
perror("Failed to open file!");
exit(1);
}
PFlight head = NULL;
PFlight tail = NULL;
while (!feof(fp)) {
PFlight flight = readFlightFromFile(fp);
if (flight != NULL) {
if (head == NULL) {
head = flight;
}
else {
tail->next = flight;
}
tail = flight;
}
}
fclose(fp);
return head;
}
int main() {
PFlight flights = readFlightsFromFile("flight.txt");
//对读取到的Flight结构体进行操作
//...
return 0;
}
```
阅读全文