可以用结构体和指针来实现
定义:
定义一个单个元素的结构
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
}
这里有几点要注意:
由于链表用指针来实现,故不要忘记分配内存
垃圾清理时一定要从起始结点开始依次向后释放,以防内存泄漏
/*creata
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 Listprintf("输入创建链表的长度:")
scanf("%d",&num)
CreateList_H(List,num) //创建链表
改为
LNode List
printf("输入创建链表的长度:")
scanf("%d",&num)
CreateList_H(&List,num) //创建链表
函数内在堆上分配好内存,但是 没有传递到栈上
另外 你的变量名很迷人