首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中简单队列数据结构的实现

C语言中简单队列数据结构的实现
EN

Stack Overflow用户
提问于 2011-07-30 11:55:28
回答 2查看 5.5K关注 0票数 1

我试图在C编程中实现一个简单的队列。但我遇到了以下错误。有人能帮我找到我的程序有什么问题吗?

代码语言:javascript
复制
#include<stdio.h>
#include<stdlib.h>
#define QUENE_SIZE 10
struct queue_structure{
  unsigned int queue_front, queue_rear;
  int queue_array[10];
};
void enqueue(struct queue_structure *,int value);
int dequeue(struct queue_structure *);
int queue_full(struct queue_structure *);
int queue_empty(struct queue_structure *);
int main(){
  struct queue_structure *queue_pointer = malloc(sizeof(struct queue_structure));
  int option,number,i,dequeue_number;
  queue_pointer->queue_front = queue_pointer->queue_rear = -1;
  while(1){
    printf("Enter the option:\n");
    scanf("%d",&option);
    switch(option){
      case 1:
        printf("Enter the number to be enqueued:\n");
        scanf("%d",&number);
        if(queue_full(queue_pointer) != 1){
          enqueue(queue_pointer,number);
        }
        else{
          printf("The queue is full");
        }
        break;
      case 2:
        if(queue_empty(queue_pointer) != 1){
          dequeue_number = dequeue(queue_pointer);
          printf("%d has been dequeued",dequeue_number);
        }
        else{
          printf("Your queue is empty\n");
        }
        break;
      case 3:
        for(i = 0; i < 10 ; i++ ){
          printf("%d",queue_pointer->queue_array[i]);
        }
        break;
      case 4:
        exit(0);
        break;
    }
  }  

}
void enqueue(struct queue_structure *qs, int number){   
  if(qs -> queue_front == qs -> queue_rear){
    qs->queue_front = qs->queue_rear = -1;
  }
  else{
    (qs -> queue_rear)++;
    qs->queue_array[qs->queue_rear] = number;    
  }  
}
int dequeue(struct queue_structure *qs){
  int i;
  if(qs->queue_front == qs->queue_rear){
    qs->queue_front = qs->queue_rear = -1; 
  }
  else{
    for(i = qs->queue_front; i < qs->queue_rear ; i++){
      qs->queue_array[i] = qs->queue_array[i + 1];
    }
  }
}
int queue_full(struct queue_structure *qs){
  if((qs->queue_rear == 10) && (qs->queue_front == 0)){
    return 1;
  }
  else{
    return 0;
  }
int queue_empty(struct queue_structure *qs){
  if((qs->queue_rear && qs->queue_front) == -1){
    return 1;
  }
  else{
    return 0;
  }
}

}

我收到以下错误

main': queue1.c:(.text+0xda): undefined reference to**queue_empty‘/tmp/ccLJHnMG.o:在函数中,collect2: ld返回一个退出状态*

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-30 11:57:49

代码语言:javascript
复制
int queue_full(struct queue_structure *qs){
  if((qs->queue_rear == 10) && (qs->queue_front == 0)){
    return 1;
  }
  else{
    return 0;
  }
} <<<<<<<<<<<<<<<<<<<<<<
int queue_empty(struct queue_structure *qs){
...
票数 2
EN

Stack Overflow用户

发布于 2011-07-30 11:58:55

最后的卷曲支撑放错了位置,应该是这样的:

代码语言:javascript
复制
int queue_full(struct queue_structure *qs){
  if((qs->queue_rear == 10) && (qs->queue_front == 0)){
    return 1;
  }
  else{
    return 0;
  }
} /* added the }*/

int queue_empty(struct queue_structure *qs){
  if((qs->queue_rear && qs->queue_front) == -1){
    return 1;
  }
  else{
    return 0;
  }
}
/* there was a } here that I've removed */

否则,queue_empty是在queue_full中定义的。这不是标准C,但gcc似乎支持它作为扩展,因此在编译期间没有错误。

使用-pedantic编译代码时,gcc会将其标记为:

代码语言:javascript
复制
aix@aix:~$ gcc -pedantic qq.c
qq.c: In function ‘queue_full’:
qq.c:78: warning: ISO C forbids nested functions
qq.c:78: warning: ISO C90 forbids mixed declarations and code
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6882942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档