| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:C语言问题求解,头文件
只看楼主 加入收藏
woslideng
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
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
搜索更多相关主题的帖子: C语言 在线 
2011-06-14 16:40
woslideng
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-24
收藏
得分:0 
在线求答,急~~~
2011-06-14 16:41
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
程序代码:
#include <malloc.h>
#include <stdlib.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*/
    return 0;
}

/*判断是否为空的函数 */
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指针指向当前链表的最后一个结点*/
    return 0;
}

/*打印链式队列的元素*/
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);
       }
       return 0;
}

/*打印链式队列当前链式队列的队首元素*/
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;
       free(p);
       return 0;
}

/*清空一个队列*/
int Clear(LinkQueue *q){
       if(q->front!=NULL){
         q->rear = q->front->next;     /*把最后一个结点的地址赋给头结点元素的next指针*/
         free(q->front);
         q->front = q->rear;           /*头尾结点指向同一个地址 */
       }
       return 0;
}#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");
      }

}

不光是找不到头文件 而且你的代码也有错误  现在我吧编译错误改了 逻辑的你自己来吧

                                         
===========深入<----------------->浅出============
2011-06-14 16:49
woslideng
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-24
收藏
得分:0 
原来的错误?在哪?求解,谢谢了,第几行就可以了?
2011-06-14 17:09
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
#include "b5.h"  // 头文件在同一个文件夹中。否则你自己写完整路径。

—>〉Sun〈<—
2011-06-14 17:15
woslideng
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-24
收藏
得分:0 
回复 5楼 cosdos
是在同一个文件夹里面的啊
2011-06-14 17:18
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
问题严重

—>〉Sun〈<—
2011-06-14 17:19
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
那也不能用尖括号写 自己的头文件都要双引号

                                         
===========深入<----------------->浅出============
2011-06-14 17:24
woslideng
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-24
收藏
得分:0 
···⊙﹏⊙b汗一个先,可以了,可貌似老谭都是用尖括号的。
我试着用双引号,结果就可以了,O(∩_∩)O~~开心啊~~~谢谢了。
2011-06-14 17:56
快速回复:C语言问题求解,头文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026947 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved