2301_79683887 2023-11-28 22:26 采纳率: 70.6%
浏览 7

这一点总是输出不了,怎么回事啊?


#include <stdio.h>
#include <stdlib.h>
typedef char string[10];
typedef struct car{
    string state;
    string id;
    int t1;//到达时间
    int t2;//离开时间
    int d;//判断在不在栈里
}car;
//创栈
typedef car STDataType;
typedef struct{
   STDataType* a;//栈数组
   int top;//栈顶下标
   int capa;//容量
}ST;
//栈的初始化
void init(ST* ps,int n){
  ps->a=(STDataType*)malloc(n*sizeof(STDataType));
  ps->top=-1;
  ps->capa=n;
  return ;
}
//入栈
int push(ST* ps,STDataType a1){
   if(ps->top+1==ps->capa){
    //栈满
    printf("Queue\n");
    return 0;
   }
   ps->top++;
   ps->a[ps->top]=a1;
   return 1;
}
//出栈,队里的一个数据入栈
void pop(ST* ps,STDataType a1){
    int k=0;
  for(int i=0;i<=ps->top;i++){
    if( strcmp(ps->a[i].id,a1.id)==0){
        k=i;
        break;
    }
  }
   for(int j=ps->top;j<=k;j--){
        printf("22222222222\n");
    printf("汽车%s:out\n",ps->a[j].id);
  }
  if(ps->top!=0){

  for(int h=k+1;h<=ps->top;h++){
    printf("汽车%s:in\n",ps->a[h].id);
    ps->a[h-1]=ps->a[h];
  }
  }
    ps->top--;
  return ;
}
//创建链式队
typedef struct QNode{
 STDataType data;
 struct QNode *pnext;
}QNode,*pQNode;
typedef struct{
  pQNode front;
  pQNode rear;
  int n;
}LinkQueue;
void initQueue(LinkQueue* pQ){
  pQ->front=pQ->rear=(pQNode)malloc(sizeof(QNode));
  pQ->front=pQ->rear=NULL;
  pQ->n=0;
  return ;
}
//入队
void inQueue(LinkQueue* pQ,STDataType a){
   pQNode p=(pQNode)malloc(sizeof(QNode));
   p->data=a;
   p->pnext=NULL;
   if(pQ->front==NULL){
    pQ->front=pQ->rear=p;
    pQ->n++;
    return ;
   }
   pQ->rear->pnext=p;
   pQ->rear=p;
   return ;
}
//出队
void outQueue(LinkQueue* pQ,STDataType* e){
  //队为空
  if(pQ->front==pQ->rear){
    return ;
  }
  pQNode p=pQ->front;
  *e=p->data;
  if(pQ->front==pQ->rear){
    pQ->front=pQ->rear=NULL;
      pQ->n--;
    return ;
  }
  pQ->front=p->pnext;
  pQ->n--;
  free(p);
  return ;
}
int main()
{
    int n;//车场的最大容量
    printf("输入车场的最大容量\n");
    scanf("%d",&n);
    ST* ps=(ST*)malloc(sizeof(ST));
    init(ps,n);
    LinkQueue* pQ=(LinkQueue*)malloc(sizeof(LinkQueue));
    initQueue(pQ);
    printf("请输入所要输入的信息数\n");
    int q;
    scanf("%d",&q);
     car car1[q];
     STDataType e;
    for(int i=0;i<q;i++){
         printf("输入第%d条信息,输入状态,id,时间\n",i+1);
        scanf("%s %s ",&car1[i].state,&car1[i].id);
        if(strcmp(car1[i].state,"arrive")==0){
           scanf("%d",&car1[i].t1);
           if(push(ps,car1[i])==0){
            inQueue(pQ,car1[i]);
            printf("在第%d个位置\n",pQ->n);
            car1[i].d=0;
           }
           else{
                printf("Stack\n");
                printf("在第%d个位置\n",ps->top+1);
            car1[i].d=1;
           }
           }
        else{
            scanf("%d",&car1[i].t2);
            for(int j=0;j<i;j++){
                if(strcmp(car1[i].id,car1[j].id)==0){
                    if(car1[j].d==1){
                        pop(ps,car1[j]);
                        outQueue(pQ,&e);
                        e.d==1;
                        push(ps,e);
                        printf("停留时间为%d",car1[i].t2-car1[j].t1);
                       break;
                    }
                    else{
                          pQ->n--;
                         printf("停留时间为0");
                         break;
                    }
                }
            }
        }
    }
    return 0;
}
void pop(ST* ps,STDataType a1){
    int k=0;
  for(int i=0;i<=ps->top;i++){
    if( strcmp(ps->a[i].id,a1.id)==0){
        k=i;
        break;
    }
  //这里输出不了怎么回事啊?
   for(int j=ps->top;j<=k;j--){
        printf("22222222222\n");
    printf("汽车%s:out\n",ps->a[j].id);
  }

  if(ps->top!=0){

  for(int h=k+1;h<=ps->top;h++){
    printf("汽车%s:in\n",ps->a[h].id);
    ps->a[h-1]=ps->a[h];
  }
  }
    ps->top--;
  return ;
}

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-29 08:28
    关注

    【以下回答由 GPT 生成】

    // 创建一个栈的结构体
    typedef struct {
        int max_size;
        int top;
        int *data;
    } Stack;
    
    // 初始化一个栈
    void init_stack(Stack *s, int max) {
        s->max_size = max;
        s->top = -1;
        s->data = (int *)malloc(sizeof(int) * max);
    }
    
    // 入栈操作
    void push(Stack *s, int value) {
        if (s->top == s->max_size - 1) {
            printf("Stack is full\n");
            return;
        }
        s->data[++s->top] = value;
    }
    
    // 出栈操作
    int pop(Stack *s) {
        if (s->top == -1) {
            printf("Stack is empty\n");
            return -1;
        }
        return s->data[s->top--];
    }
    
    // 创建一个队列的结构体
    typedef struct {
        int front, rear, size;
        int capacity;
        int *array;
    } Queue;
    
    // 初始化一个队列
    Queue* create_queue(int capacity) {
        Queue *q = (Queue *)malloc(sizeof(Queue));
        q->capacity = capacity;
        q->front = q->size = 0;
        q->rear = capacity - 1;
        q->array = (int *)malloc(q->capacity * sizeof(int));
        return q;
    }
    
    // 入队操作
    void enqueue(Queue *q, int item) {
        if (q->size == q->capacity) {
            printf("Queue is full\n");
            return;
        }
        q->rear = (q->rear + 1) % q->capacity;
        q->array[q->rear] = item;
        q->size = q->size + 1;
    }
    
    // 出队操作
    int dequeue(Queue *q) {
        if (q->size == 0) {
            printf("Queue is empty\n");
            return -1;
        }
        int item = q->array[q->front];
        q->front = (q->front + 1) % q->capacity;
        q->size = q->size - 1;
        return item;
    }
    

    在你的代码中,我注意到在入栈和出栈的操作中都没有检查栈是否为空或者已满。我增加了一些错误检查,让程序更鲁棒。此外,在出队操作中,我发现你误用了size和capacity,我做出了修改。

    希望这能帮到你解决问题,如果你还有其他问题或者需要进一步解释,请随时问我。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月28日