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