C语言问题求解,头文件
在线等,编写的内容是链式队列存储。这里是头文件(b5.h)
程序代码:/*链表结点的结构体*/
typedef struct NODE_TYPE{
int data; /*数据域*/
struct NODE_TYPE *next; /*指针域 */
}QNode;
/*队列的结构体*/
typedef struct LINK_QUEUE{
QNode *front; /*队头指针*/
QNode *rear; /*队尾指针*/
}LinkQueue;
/*创建队列的函数*/
int InitQueue(LinkQueue *q){
q->front = q->rear = (QNode *)malloc(sizeof(QNode));/*开辟结点,front和rear指针都指向新开辟的结点地址*/
if(! q->front) exit(0); /*如果失败,退出*/
q->front->next = NULL; /*头结点指针域设为NULL*/
}
/*判断是否为空的函数 */
int IsEmpty(LinkQueue *q){
if(q->front&&q->rear==NULL) return 0;/*如果头尾指针都是NULL,则返回0*/
else return 1; /*否则返回1 */
}
/*插入结点元素的函数 */
int Add(LinkQueue *q,int e){
QNode *p;
p=(QNode *)malloc (sizeof(QNode)); /*创建一个队列元素的结点*/
p->data=e;
p->next = NULL;
q->rear->next = p; /*将第一个结点与第二个结点连接*/
q->rear = p; /*将虚表头里的rear指针指向当前链表的最后一个结点*/
}
/*打印链式队列的元素*/
int PrintNode(LinkQueue *q){
int i;
QNode *temp;
if(IsEmpty(&q)==0){ /*如果链式队列为空,退出*/
printf("The Queue is null!\n");
exit(0);
}
for(i=1,temp=q->front->next;temp!=NULL;i++,temp=temp->next){ /*temp的初值为第一个结点的地址(不是头结点) ,如果没遇见NULL,不断将下一个地址赋给temp*/
printf("the %dth number of the is %d\n",i,temp->data);
}
}
/*打印链式队列当前链式队列的队首元素*/
int GetFront(LinkQueue *q){
QNode *temp;
if(IsEmpty(&q)==0){ /*如果链式队列为空,退出*/
printf("The Queue is null!\n");
exit(0);
}
temp=q->front->next;
return(temp->data);
}
/*打印链式队列当前链式队列的队尾元素*/
int GetRear(LinkQueue *q){
QNode *temp;
if(IsEmpty(&q)==0){ /*如果链式队列为空,退出*/
printf("The Queue is null!\n");
exit(0);
}
temp=q->rear;
return(temp->data);
}
/*出队操作*/
int Del(LinkQueue *q){
QNode *p;
if(q->front == q->rear) exit(0);
p = q->front->next; /*将头结点的下一结点的指针赋给指针变量p*/
q -> front ->next = p->next;
if(q->rear == p) q->rear = p->front;
free(p);
}
/*清空一个队列*/
int Clear(LinkQueue *q){
if(q->front!=NULL){
q->rear = q->front->next; /*把最后一个结点的地址赋给头结点元素的next指针*/
free(q->front);
q->front = q->rear; /*头尾结点指向同一个地址 */
}
}
然后是主程序:(b5.c)
程序代码: #include<stdio.h>
#include<b5.h>
int main()
{
int i,x,j,k,length;
LinkQueue q;
InitQueue(&q);
if(IsEmpty(&q)==0) printf("The Queue is null!\n");
printf("please input the length of queue:");
scanf("%d",&length);
printf("\n");
for(i=1;i<=length;i++){
printf("please input %dth num:",i);
scanf("%d",&x);
Add(&q,x);
}
printf("\n");
if(IsEmpty(&q)==1) printf("The Queue is full!\n");
printf("\n");
PrintNode(&q);
printf("\n");
printf("The front number is %d\n",GetFront(&q));
printf("The rear number is %d\n",GetRear(&q));
printf("\n");
printf("After delet...\n");
Del(&q);
PrintNode(&q);
printf("\n");
Clear(&q);
if(IsEmpty(&q)!=0) printf("The clear is success!\n");
printf("\n");
/*连续3次完成操作:入队4元素,出队2元素,打印链式队列,打印当前链式队列的队首和队尾元素*/
for(i=1;i<=3;i++)
{
printf("The %dth work!\n",i);
for(j=1;j<=4;j++)
{
printf("please input %dth num:",j);
scanf("%d",&x);
Add(&q,x);
}
printf("\n");
for(k=0;k<2;k++)
{
printf("After delet...\n");
Del(&q);
}
printf("\n");
PrintNode(&q);
printf("\n");
printf("front=%d, rear=%d\n",GetFront(&q), GetRear(&q));
printf("\n");
}
getch();
}问题现象:编译不通过,“错误 b5.c 2: 无法打开包含文件 'b5.h'”
本人用的是WIN-TC









