结果:
IDE:Visual Studio 2019
声明:为了方便书写代码,用到了C++的引用调用特性和iostream作为输入输出,读者可以使用指针调用和scanf_s/print语句实现相同效果
tips:有疑问可以在下面交流,我会尽量回复的
头文件heads.h
#pragma once
#include "stdio.h"
#include "iostream"
#include "time.h"
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
typedef short int Status;
using namespace std;
//事件的结构体
typedef struct {
int Occurtime;
int NType;
}Event,ElemType;
//顾客的结构体
typedef struct {
int Arrivaltime;
int Duration;
}Customer, QElemType;
//窗口前的顾客
typedef struct LNode {
QElemType data;
struct LNode* next;
}LNode,*Link;
//窗口
typedef struct {
Link front, rear;
int len;
}Cust;
//事件表
typedef struct Node{
ElemType data;
struct Node* next;
}*LinkList,*Eventlist,Node;
//程序主要变量
Eventlist ev;
Event en;
Cust q[5];
QElemType customer;
int TotalTime, CustomerNum, durtime, intertime;
int CloseTime = 480;//关门时间
头文件LNode.h
带头结点的链表,用来作为事件表,熟悉链表操作的建议不看
#include"heads.h"
//1.表的初始化
Status InitLNode(LinkList& L) {
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
return OK;
}//InitLNode
//2.销毁
Status DestoryLNode(LinkList& L) {
LinkList p, q = L->next;
while (q != NULL) {
p = q->next;
free(q);
q = p;
}
L->next = NULL;
return OK;
}//第一种写法
Status Destory(LinkList& L) {
LinkList p;
while (L->next != NULL) {
p = L->next;
L->next = p->next;
free(p);
}
L->next = NULL;
return OK;
}//第二种写法
Status Empty(LinkList L) {
return (L->next == NULL) ? TRUE : FALSE;
}
//5.返回表的长度
Status Length(LinkList L) {
int len = 0;
LinkList head = L->next;
while (head != NULL) {
head = head->next;
len++;
}
return len;
}
//6.查找第i个元素
Status GetDate(LinkList L