请各位看看那里出错了,谢谢。
#ifndef _QUEUE_H_#define _QUEUE_H_
typedef struct item
{
int gumption;
int charisma;
}Item;
#define MAXQUEUE 10
typedef struct node
{
Item item;
struct node * next;
}Node;
typedef struct queue
{
Node * front; /* 指向队列首的指针 */
Node * rear; /* 指向队列尾的指针 */
int items; /* 队列中项目的个数 */
}Queue;
/* 操作: 初始化队列 */
/* 操作前:pq指向一个队列 */
/* 操作后:该队列被初始化为空队列 */
void InitializeQueue (Queue * pq);
/* 操作: 检查队列是否已满 */
/* 操作前:pq指向一个先前已初始化过的队列 */
/* 操作后:如果该队列已满,则返回true,否则返回false */
int QueueIsFull (const Queue * pq);
/* 操作: 检查队列是否为空 */
/* 操作前:pq指向一个先前已初始化过的队列 */
/* 操作后:如果该多列为空,则返回true,否则false */
int QueueIsEmpty(const Queue * pq);
/* 操作: 确定队列中项目的个数 */
/* 操作前:pq指向一个先前已初始化过的列表 */
/* 操作后:返回队列中项目的个数 */
int QueueItemCount(Queue * pq);
/* 操作: 向队列尾添加项目 */
/* 操作前: pq指向一个先前已初始化过的列表 */
/* item是要添加到队列尾端的项目 */
/* 操作后: 如果队列未满,item被添加到队列尾部,函数返回true */
/* 否则不改变队列,函数返回false */
int EnQueue (Item item, Queue * pq);
/* 操作: 从队列首端删除项目 */
/* 操作前:pq指向一个先前已初始化过的列表 */
/* 操作后:如果队列为非空,队列首端的项目被复制到 * pitem,*/
/* 并从队列中删除,函数饭后true;如果这个操作时多列 */
/* 为空,把队列重置为空队列 */
/* 如果队列开始时为空,不改变队列,函数返回false */
int DeQueue (Item * pitem, Queue * pq);
/* 操作:清空多列 */
/* 操作前: pq指向一个先前已初始化过的队列 */
/* 操作后: 队列被清空 */
void EmptyTheQueue (Queue * pq);
#endif
这个是头文件。
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
/* 局部函数 */
struct void CopyToNode(Item item, Node * pn);
struct void CopyToItem(Node * pn, Item * pi);
void InitnalizeQueue (Queue * pq)
{
pq->front = pq->rear = NULL;
pq->items = 0;
}
int QueueIsEmpty (const Queue * pq)
{
return pq->items == 0;
}
int QueueIsFull (const Queue * pq)
{
return pq->items == MAXQUEUE;
}
int QueueItemCount (const Queue * pq)
{
return pq->items;
}
int EnQueue (Item item, Queue * pq)
{
Node * pnew;
if(QueueIsFull(pq))
return 0;
pnew = (Node *) malloc (sizeof(Node));
if(pnew == NULL)
{
fprintf(stderr,"Unable to allocate memory!\n");
exit(1);
}
CopyToNode(item, pnew);
pnew->next = NULL;
if(QueueIsEmpty(pq))
pq->front = pnew; /* 项目位于队列首端 */
else
pq->rear->next = pnew; /* 链接到队列结尾 */
pq->rear = pnew; /*记录队列尾端的移动 */
pq->items++; /*队列项目个数增1 */
return 1;
}
int DeQueue(Item * pitem, Queue * pq)
{
Node * pt;
if(QueueIsFull(pq))
return 0;
CopyToItem(pq->front, pitem);
pt = pq->front;
pq->front->next = pq->front;
free(pt);
pq->items--;
if(pq->items == 0)
pq->rear = NULL;
return 1;
}
/* 清空队列 */
void EmpytTheQueue (Queue * pq)
{
Item dummy;
while(!QueueIsEmpty(pq))
DeQueue(&dummy, pq);
}
/* 局部函数 */
struct void CopyToNode (Item item ,Node * pn)
{
pn->item = item;
}
struct void CopyToItem (Node * pn, Item * pi)
{
* pi = pn->item;
}
这个是实现接口文件。
#include <stdio.h>
#include "queue.h"
int main (void)
{
Queue line;
Item temp;
char ch;
InitializeQueue(&line);
puts("Testing the Queue interface. Type a to add a value, ");
puts("type d to delete a value, and type q to quit.");
while((ch = getchar()) != 'q')
{
if(ch != 'a' && ch != 'd')
continue;
if(ch == 'a')
{
printf("Integer to add: ");
scanf("%d",&temp);
if(!QueueIsFull(&line))
{
printf("Putting %d into queue\n",temp);
EnQueue(temp,&line);
}
else
puts("Queue is full!");
}
else
{
if(QueueIsEmpty(&line))
puts("Nothing to delete!");
else
{
DeQueue(&temp, &line);
printf("Removing %d from queue\n",temp);
}
}
printf("%d itmes in queue\n",QueueItemCount(&line));
puts("Type a to add, d to delede,q to quit: ");
}
EmptyTheQueue(&line);
puts("Bye!");
return 0;
}
这个是测试接口文件。当编译时总是出现下列几行错误信息:
e:\新建文件夹 (2)\chengxu4\queue.c(6) : error C2628: '$S1' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(7) : error C2628: '$S2' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(26) : warning C4028: formal parameter 1 different from declaration
e:\新建文件夹 (2)\chengxu4\queue.c(79) : error C2628: '$S3' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(80) : error C2371: 'CopyToNode' : redefinition; different basic types
e:\新建文件夹 (2)\chengxu4\queue.c(6) : see declaration of 'CopyToNode'
e:\新建文件夹 (2)\chengxu4\queue.c(80) : error C2079: 'CopyToNode' uses undefined struct '$S3'
e:\新建文件夹 (2)\chengxu4\queue.c(84) : error C2628: '$S4' followed by 'void' is illegal (did you forget a ';'?)
e:\新建文件夹 (2)\chengxu4\queue.c(85) : error C2371: 'CopyToItem' : redefinition; different basic types
e:\新建文件夹 (2)\chengxu4\queue.c(7) : see declaration of 'CopyToItem'
e:\新建文件夹 (2)\chengxu4\queue.c(85) : error C2079: 'CopyToItem' uses undefined struct '$S4'
use_q.c
执行 cl.exe 时出错.
请各位大虾看看到底是哪里出错了。我找了半天没找到。谢谢!!!!!