qq_33440269 2016-06-22 08:27 采纳率: 100%
浏览 1206
已采纳

我的代码没有办法删除节点,有大神可以给看一下吗?

/*停车场有100个车位,
当未停满100辆车时,允许车辆进入,车辆进入时记录车牌号和进入时间;
停满100辆车后,不允许车辆进入。
车辆开出时,显示车辆车牌号和车辆进入的时间。
*/
#include
#include
#include
#include

typedef struct
{
char carnum[10];
char time[10];
}elemtype;

typedef struct node
{
elemtype data;
struct node *next;
}node,*linklist;

int init_link(linklist &la)//构造一个空的线性表
{
la=(node *)malloc(sizeof(node));
if(la==NULL) exit(-1);
la->next=NULL;
return 1;
}

int arrival(linklist &la,elemtype e)//车辆到达
{
linklist p,s;
p=la ;
while(p->next)
p=p->next ;
s=(linklist)malloc(sizeof(node));
if(!s) return 0;
s->data=e ;
s->next=p->next ;
p->next=s ;
return 1 ;
}

int leave(linklist &la,char *carnum1)//车辆离开
{

linklist p,q;
p=la;
while(p->next)
{
if(strcmp(p->next->data.carnum,carnum1)==0)
{
q=p->next ;
p->next=q->next ;

//printf("%s,%s\n",q->data.carnum,q->data.time);
free(q) ;
return 1;
}
p=p->next;
}
return 0;
}

void list(linklist &la)//车辆信息
{
linklist p;
p=la->next;
while(p)
{

printf("%s %s\n",p->data.carnum,p->data.time);
p=p->next;

}
}

int main()
{
linklist adr;
init_link(adr);
elemtype x;
int t=0;
char ch,carnum[10];
do
{
printf("1.车辆到达 \n");
printf("2.车辆离开 \n");
printf("3.车辆信息 \n");
printf("4.退出程序 \n");
printf("请选择:\n");
scanf("%c",&ch);
switch(ch)
{
case '1'://车辆到达
if(t {
printf("输入车牌号和时间\n");
scanf("%s,%s",x.carnum,x.time);
if(arrival(adr,x)==1)
{
t=t+1;
printf("成功进入停车场\n");
}
else
printf("进入停车场失败\n");
}
else
printf("停车场已满\n");
break;
case '2'://车辆离开
if(t>0)
{
printf("输入车牌号\n");
scanf("%s",carnum);
if(leave(adr,carnum))
{
printf("车辆成功开出\n");
t=t-1;
}
else
{
printf("车辆没有成功开出,请重试!\n");
}
}
else
printf("停车场内没有车\n");
break;
case '3'://车辆信息
list(adr);
printf("%d\n",t);
break;
case '4'://退出主程序
return 0;
default:printf("没有该选项,请重新选择!\n");
}
}while(1);
return 0;
}

  • 写回答

1条回答 默认 最新

  • engineer-yang 2016-06-22 08:45
    关注

    把下面的代码:
    p=la;
    while(p->next)
    {
    if(strcmp(p->next->data.carnum,carnum1)==0)
    {
    q=p->next ;
    p->next=q->next ;

    //printf("%s,%s\n",q->data.carnum,q->data.time);
    free(q) ;
    return 1;
    }
    p=p->next;
    }
    修改为:
    p=la->next;
    q=la;
    while(p)
    {
    if(strcmp(p->data.carnum,carnum1)==0)
    {
    q->next=p->next ;

    //printf("%s,%s\n",p->data.carnum,p->data.time);
    free(p) ;
    return 1;
    }
    q=p;
    p=p->next;
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏