如何用C语言编写一个链表?

Python024

如何用C语言编写一个链表?,第1张

可以用结构体和指针来实现

定义:

定义一个单个元素的结构

typedef struct Chain_tag { // 这里用typedef来定义,方便使用

    int data // 这里的数据可以是任意类型

    //其他数据

    struct Chain_tag *prev, *next// 由于Chain为不完全类型,故只能用指针的方式声明

} Chain

使用:

用单个结构体的指针作为head

#include <malloc.h>

//Chain的定义写在这里

Chain *

alloc_single_chain(int data /*, (其他参数)*/)

{

    Chain *tmp

    

    tmp = malloc(sizeof(Chain))

    tmp.data = data

    //...其余数据初始化

    tmp.prev = tmp.next = NULL // 将前后指针置为NULL

    

    return tmp

}

void

dispose_chain(Chain *target) //其实这里功能简单,用宏实现也可以

{

    free(target)

    return

}

int main()

{

    Chain *head

    Chain *pos

    

    head = alloc_single_chain(10)//初始化起始结点

    head->next = alloc_single_chain(11)//同理。。下一个结点

    

    for (pos = head pos pos = pos->next)//清理垃圾好习惯

    {

       dispose_chain(pos)

    }

    

    return 0

}

这里有几点要注意:

由于链表用指针来实现,故不要忘记分配内存

垃圾清理时一定要从起始结点开始依次向后释放,以防内存泄漏

/*creat

a

list*/

#include

"stdlib.h"

#include

"stdio.h"

struct

list

{

int

data

struct

list

*next

}

typedef

struct

list

node

typedef

node

*link

void

main()

{

link

ptr,head

int

num,i

ptr=(link)malloc(sizeof(node))

ptr=head

printf("please

input

5

numbers==>\n")

for(i=0i<=4i++)

{

scanf("%d",&num)

ptr->data=num

ptr->next=(link)malloc(sizeof(node))

if(i==4)

ptr->next=NULL

else

ptr=ptr->next

}

ptr=head

while(ptr!=NULL)

{

printf("The

value

is

==>%d\n",ptr->data)

ptr=ptr->next

}

}

上面是一个简单的创建链表的C程序。所谓链表形象的讲就是一个数据块里面存有数据,并且存有下一个数据的指针,这样一个指一个形成一个数据链。这个数据链可以被操作,例如插入数据,删除数据,等。至于指令,首先定义一个结构体,它存有数据和指向下一个数据块的指针。然后分配空间。注意最后一个为NULL,当然你也可以指向开头一个数据块形成一个循环链表。

主函数这里

Linklist List

printf("输入创建链表的长度:")

scanf("%d",&num)

CreateList_H(List,num) //创建链表

改为 

LNode List

printf("输入创建链表的长度:")

scanf("%d",&num)

CreateList_H(&List,num) //创建链表

函数内在堆上分配好内存,但是 没有传递到栈上

另外 你的变量名很迷人