从零开始的编程之旅 2020-05-21 20:10 采纳率: 0%
浏览 417

哪位大神帮忙看一下下面的这个代码的addlist函数部分有什么问题?以及leaveTop函数有什么问题。。。跪谢

#define _CRT_SECURE_NO_WARNINGS
#include
#include
using namespace std;
#define ElemType int
#define null 0
#define MAXSIZE 100
#define TempSpace 10

typedef struct Link {//定义停车场链表结构体
ElemType data; //定义数据域
struct Link* next; //定义指针域
}Link;

Link* head;
Link* end;

void List_init(Link* head)//初始化链表
{
head = (Link*)malloc(sizeof(Link));
head->next = NULL;
}

void AddList(Link lot,ElemType a)//停车场单链表增加结点
{
//创建一个节点
Link
temp = (Link*)malloc(sizeof(struct Link)); //此处注意强制类型转换
Link* rear = (Link*)malloc(sizeof(struct Link));//头结点
rear = lot;
while (rear->next!=NULL) {
rear = rear->next;
}
//节点数据进行赋值
temp->data = a;
temp->next = NULL;
rear->next = temp;
//连接分两种情况1.一个节点都没有2.已经有节点了,添加到尾巴上

//if (NULL == head)
//{
//  head = temp;
    //end = temp;
//}
//else
//{
    //end->next = temp;
    //end = temp;           //尾结点应该始终指向最后一个

//}
//end = temp;           //尾结点应该始终指向最后一个

}

void LeaveStop(Link* L, ElemType x, ElemType n) {//删除指定元素的结点
Link* p;
Link* q;
p = L->next;
for (int i=0; i <= x; i++)
{
if (p->data == n)
{
q = p->next;
p->next = q->next;
free(q);
}
else {
p = p->next;
}
}
}

typedef struct Node ///定义等候车道队列的结点
{
ElemType data;
struct Node* next;
}Node;

typedef struct LQueue // 定义等候车道队列
{
Node* front;//队头结点
Node* rear;//队尾结点
}LQueue;

void init(LQueue* que) //初始化队列(只需初始化LQueue,即队头结点与队尾结点)
{
que = (LQueue*)malloc(sizeof(LQueue));
que->front = NULL;
que->rear = NULL;
}

int isEmpty(LQueue* que) //等候车道是否满了
{
if (que->front == NULL && que->rear == NULL)
{
return 1;
}
else {
return 0;
}
}

void push(LQueue& que, ElemType x) //等候车道入队
{
Node* node = (Node*)malloc(sizeof(Node));
node->data = x;
node->next = NULL;
que.rear = node;
}

void pop(LQueue* que, ElemType x) //等候车道出队
{
Node* temp = (Node*)malloc(sizeof(Node));
temp = que->front;
x = que->front->data;
que->front = que->front->next;
free(temp);//释放p结点
}

int waitingArea(LQueue Q, int carnum) //判断车是否在等候区
{
if (Q.front = Q.rear)
return 0;//等候区没有车
while (Q.front != null) {
if (Q.front->data == carnum)
return 1;
Q.front = Q.front->next;
}
return 0;
}

int main()
{
ElemType number;

int selection = 1;//定义操作选项 
int choice1 = 1; //是否进入停车场的选项 
int choice2 = 1;//选择离开停车场出口的选项 
int choice3 = 1;//选择从哪个入口进入停车场的选项 
int choice4 = 1;//选择从哪个便车道离开的选项 
int parking_car = 0;//正在停车场内停的车的数量 
int waiting_car_south = 0;//正在南出口等候车道的车辆数量
int waiting_car_north = 0;//正在北出口等候车道的车辆数量
int parking_max = 100;//最多可以停放多少车辆 
int flag = 1;//用于执行循环的整数值 

LQueue park_north;
init(&park_north);//初始化北等候通道 
LQueue park_south;
init(&park_south);//初始化南等候通道 
Link lot;
List_init(&lot); //初始化停车场 

printf("*******************欢迎使用停车场管理系统,按任意键进入主菜单******************\n");
printf("");
do
{
    getchar();
    system("cls");
    printf("*******************欢迎使用停车场管理系统,按任意键进入主菜单\n");
    printf("                                主菜单                       \n");
    printf("                   *1*                         汽车入场      \n");
    printf("                   *2*                         汽车离场      \n");
    printf("                   *3*                         车位查询      \n");
    printf("                   *4*                         离开车道      \n");
    printf("                   *0*                         退出系统      \n");
    printf("                   请按提示输入数字:\n");
    scanf("%d", &selection);
    switch (selection)
    {
    case 1://汽车入场的选项 
        system("cls");
        printf("***********************************汽车入场************************************\n");
        if (parking_car < MAXSIZE)//停车场有空位 
        {
            printf("                   请输入您的车辆编号:\n");
            scanf("%d", &number);
            AddList(&lot,number);
            printf("                    欢迎您进入本停车场!\n");
            parking_car++;//停车场内部车辆 
            getchar();
            break;
        }
        else if ((waiting_car_south < TempSpace || waiting_car_north < TempSpace) && parking_car == MAXSIZE)//停车场没有空位,但等候车位有空位 
        {
            int car_num = waiting_car_south + waiting_car_north;
            printf("***********当前停车场已停满,有%d辆车在等待,请问是否愿意进入等候车道**********\n", &car_num);
            printf("                *1*\t愿意等待               *0*\t离开停车场\n");
            getchar();
            while (flag == 1)//进入choice1的循环
            {
                scanf("%d", &choice1);
                getchar();
                switch (choice1)
                {
                case 1:
                    printf("                    请您进入等候车道等待\n");//需要加入选择哪个入口的switch 
                    getchar();
                    printf("***********************************请选择进入停车场的入口************************\n");
                    printf("                *1*\t南入口               *2*\t北入口\n");
                    scanf("%d", &choice3);
                    switch (choice3)
                    {
                    case 1:
                        printf("                   您进入南入口等待,您排在等待通道的第%d位\n", &waiting_car_south);
                        printf("                   请输入您的车辆编号:\n");
                        scanf("%d", number);
                        push(park_south, number);
                        waiting_car_south++;
                        printf("*******************按任意键再次进入主菜单******************\n");
                        getchar();
                        break;
                    case 2:
                        printf("                   您进入北入口等待,您排在等待通道的第%d位\n", &waiting_car_north);
                        printf("                   请输入您的车辆编号:\n");
                        scanf("%d", number);
                        push(park_north, number);
                        waiting_car_north++;
                        printf("*******************按任意键再次进入主菜单******************\n");
                        getchar();
                        break;
                    }
                    flag = 0;
                    break;
                case 2:
                    printf("                   您已离开停车场\n");
                    getchar();
                    flag = 0;
                    break;
                default:
                    printf("                   2输入错误,请您重新输入!\n");
                    getchar();
                    break;
                }
            }
        }
        else if (waiting_car_south == TempSpace && waiting_car_north == TempSpace && parking_car == MAXSIZE)//停车场没有空位,但等候车位有空位 
        {
            printf("                    车位已满请重新选择功能\n");
            getchar();
            break;
        }
        break;
    case 2://汽车离场的选项
        if (parking_car > 0)
        {
            system("cls");
            printf("***********************************请选择离开停车场的出口************************\n");
            printf("                *1*\t南出口               *2*\t北出口\n");
            while (flag == 1)//进入choice2的循环 
            {
                scanf("%d", &choice2);
                printf("                   请输入您的车辆编号:\n");
                scanf("%d", number);
                switch (choice2)
                {
                case 1:
                    if (isEmpty(&park_south))
                    {
                        printf("                   您已离开停车场\n");
                        LeaveStop(&lot, MAXSIZE, number);
                        parking_car--;
                    }
                    else
                    {
                        printf("                    南出口现在有%d辆车正在等候\n", waiting_car_south);
                        waiting_car_south++;
                        parking_car--;
                        push(park_south, number);
                        flag = 0;
                        getchar();
                    }
                    break;
                case 2:
                    if (isEmpty(&park_north))
                    {
                        printf("                   您已离开停车场\n");
                        LeaveStop(&lot, MAXSIZE, number);
                        parking_car--;
                    }
                    else
                    {
                        printf("                    北出口现在有%d辆车正在等候\n", waiting_car_north);
                        waiting_car_north++;
                        parking_car--;
                        push(park_north, number);
                        flag = 0;
                        getchar();
                    }
                    break;
                default:
                    printf("                   3输入错误,请您重新输入!\n");
                    getchar();
                    break;
                }
            }
        }
        else
        {
            printf("                   停车场内没有车辆\n");
            printf("                   请重新选择功能\n");
            getchar();
            break;
        }
        break;
    case 3://车位查询
        system("cls");
        printf("**********************************停车场信息************************************\n");
        if (parking_car == MAXSIZE)//停车场已经停满 
        {
            printf("                    停车场已经停满\n");
            getchar();
            break;
        }
        else//停车场车辆未满  
        {
            printf("                    现在停车场中有%d辆汽车,有%d个可用车位\n", parking_car, parking_max - parking_car);
            printf("                    南出口现在有%d辆车正在等候\n", waiting_car_south);
            printf("                    北出口现在有%d辆车正在等候\n", waiting_car_north);
            getchar();
            break;
        }
    case 4:
        printf("***********************************请选择离开停车场的出口************************\n");
        printf("                *1*\t南出口               *2*\t北出口\n");
        while (flag == 1)//进入choice2的循环 
        {
            scanf("%d", &choice4);
            switch (choice4)
            {
            case 1:
                if (isEmpty(&park_south) == 1)
                {
                    printf("                   等候车道为空,请您重新输入!\n");
                    getchar();
                    break;
                }
                else
                {
                    printf("                   请输入您的车辆编号:\n");
                    scanf("%d", &number);
                    if (waitingArea(park_south, number) == 1)
                    {
                        pop(&park_south, number);
                        waiting_car_south--;
                        printf("                   您已离开南出口\n");
                        getchar();
                        break;
                    }
                    else
                    {
                        printf("                   该车辆并不在南出口:\n");
                        getchar();
                        break;
                    }
                }
            case 2:
                if (isEmpty(&park_north) == 1)
                {
                    printf("                   等候车道为空,请您重新输入!\n");
                    getchar();
                    break;
                }
                else
                {
                    if (waitingArea(park_north, number) == 1)
                    {
                        pop(&park_north, number);
                        waiting_car_north--;
                        printf("                   您已离开南出口\n");
                        getchar();
                        break;
                    }
                    else
                    {
                        printf("                   该车辆并不在南出口:\n");
                        getchar();
                        break;
                    }
                }
            default:
                printf("                   输入错误,请您重新输入!\n");
                getchar();
                break;
            }
        }
    case 0://离开停车场
        system("cls");
        printf("                   请输入您的车辆编号:\n");
        scanf("%d", &number);
        LeaveStop(&lot, MAXSIZE, number);
        printf("                   您已离开停车场\n");
        parking_car--;
        getchar();
        break;
    default:
        printf("                   输入错误,请您重新输入!\n");
        getchar();
        break;
    }
} while (choice1 != 0);
return 0;

}

  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序