c语言把单链表的操作和定义放入头文件LinkedList.h要怎么做

就是数据结构的单链表代码
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef structSingleNode{ ElemType data; structSingleNode *next;}SingleLinkedList,*Linklist;//定义单链表结点的结构体void ListInitialize(SingleLinkedList **head){ if((*head=(SingleLikedList *)malloc(sizeof(SingleLikedList)))==NULL) exit(1); (*head)->next=NULL;}//单链表初始化int ListLength(SingleLikedList *head){ SingleLikedList *p=head; int size=0; while(p->next!=NULL) { p=p->next; size++; } return size;}//求线性表长度int ListGet(SingleLikedList *head,int i,ElemType *x){ SingleLikedList *p; int j; p=head; j=-1; while(p->next!=NULL&j<i) { p=p->next; j++; } if(j!=i) { printf("取元素位置参数错!"); return 0; } *x=p->data; return 1;}//取数据元素

.h是声明函数和变量使用的,再建立一个.c文件,把函数定义放在里面,同时包含.h文件,
.h文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef structSingleNode
{
ElemType data;
structSingleNode *next;
}SingleLinkedList,*Linklist;//定义单链表结点的结构体

void ListInitialize(SingleLinkedList **head);

int ListLength(SingleLikedList *head);

int ListGet(SingleLikedList *head,int i,ElemType *x);

.c文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <LinkedList.h>
void ListInitialize(SingleLinkedList **head)
{
if((*head=(SingleLikedList *)malloc(sizeof(SingleLikedList)))==NULL)
exit(1);
(*head)->next=NULL;
}//单链表初始化

int ListLength(SingleLikedList *head)
{
SingleLikedList *p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}//求线性表长度

int ListGet(SingleLikedList *head,int i,ElemType *x)
{
SingleLikedList *p;
int j;
p=head;
j=-1;
while(p->next!=NULL&j<i)
{
p=p->next;
j++;
}
if(j!=i)
{
printf("取元素位置参数错!");
return 0;
}
*x=p->data;
return 1;
}//取数据元素追问

这样?

追答

LinkedList.c文件:
#include
#include
#include
#include ”LinkedList.h“
void ListInitialize(SingleLinkedList **head)
{
if((*head=(SingleLikedList *)malloc(sizeof(SingleLikedList)))==NULL)
exit(1);
(*head)->next=NULL;
}//单链表初始化

int ListLength(SingleLikedList *head)
{
SingleLikedList *p=head;
int size=0;
while(p->next!=NULL)
{
p=p->next;
size++;
}
return size;
}//求线性表长度

int ListGet(SingleLikedList *head,int i,ElemType *x)
{
SingleLikedList *p;
int j;
p=head;
j=-1;
while(p->next!=NULL&jnext;
j++;
}
if(j!=i)
{
printf("取元素位置参数错!");
return 0;
}
*x=p->data;
return 1;
}//取数据元素

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-14
不讨论你写的这个代码正确性。
如果你要把这些定义和函数做为头文件,导入到其他文件中,就能引用。
可以把该文件和你要导入主体文件放在一起。
然后导入的时候写 #include "文件名.后缀名",这样编译的时候会在源文件目录中找你这个导入的文件。
如果写#include <文件名.后缀名> 那么文件必须放在文件目录中,文件目录是由用户环境配置时设定的。
后缀名不是必须.h,就算是同样的.c文件也一样可以导入。
另外头文件里如果写了include,那么也会连带一起导入其他文件。
第2个回答  2018-02-14

把代码直接保存在同一个目录下的LinkedList.h中

LinkedList.h的内容只有:

typedef structSingleNode {
    ElemType data;
    structSingleNode *next;
} SingleLinkedList,*Linklist;
//定义单链表结点的结构体
void ListInitialize(SingleLinkedList **head)
{
    if((*head=(SingleLikedList *)malloc(sizeof(SingleLikedList)))==NULL) exit(1);    //取数据元素
    (*head)->next=NULL;
}
//单链表初始化
int ListLength(SingleLikedList *head)
{
    SingleLikedList *p=head;
    int size=0;
    while(p->next!=NULL) {
        p=p->next;
        size++;
    }
    return size;
}
//求线性表长度
int ListGet(SingleLikedList *head,int i,ElemType *x)
{
    SingleLikedList *p;
    int j;
    p=head;
    j=-1;
    while(p->next!=NULL&j<i) {
        p=p->next;
        j++;
    }
    if(j!=i) {
        printf("取元素位置参数错!");
        return 0;
    } *x=p->data;
    return 1;
}

然后代码就

#include"LinkedList.h"

第3个回答  2018-02-15

太乱了。多看书。

给你个参考。

第4个回答  2017-09-04
原因有二:
一、跟踪难度大。如果工程小,跟踪其变化没有什么难度,如果工程很大,包含这个头文件的文件都有可能修改其值,出了问题不好排查。
二、c主要还是用于嵌入式,与硬件有关。许多嵌入式系统的内存不想电脑那么大,如果在头文件中声明全局变量,那么所有引用该头文件的文件都将为此变量非配内存,这样降低了内存的利用率,有时几K就是致命的。
相似回答