定义:
定义一个单个元素弯拆的指闹孙结构
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 *tmptmp = malloc(sizeof(Chain)) tmp.data = data //...其余数据初始化tmp.prev = tmp.next = NULL// 将前后指针置为NULL return tmp} voiddispose_chain(Chain *target) //其实这里功能简单,用宏实现也可以{free(target) return} int main(){Chain *head Chain *poshead = alloc_single_chain(10)//初始化起始结点head->next = alloc_single_chain(11)//同理。。下一个结点 for (pos = headpospos = pos->next)//清理垃圾好习惯{ dispose_chain(pos) } return 0}
可以用结构体和指针来实现
定义:
定义一个单个元素的结构
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
}
这里有几点要注意:
由于链表用指针来实现,故不要忘记分配内存
垃圾清理时一定要从起始结点开始依次向后释放,以防内存泄漏
这嫌念是个很简单的链表创建和输出
#include<stdio.h>
#include<stdlib.h>
typedef struct linkednode
{
char data
struct linkednode *next
}node,*link_list//链表节点的结构及重命名
link_list creat()//创建一个逗判链表返回类型是链表的首地址
{
link_list L
node *p1,*p2
char data
L=(node*)malloc(sizeof(node))//开辟存储空间
p2=L
while((data=getchar())!='\n')//输入回车键时结束输入
{
p1=(node*)malloc(sizeof(node))
p1->data=data
p2->next=p1
p2=p1
}
p2->山者改next=NULL
return L
}
void print(link_list L)//把链表输出
{
node *p
p=L->next
while(p!=NULL)
{
printf("%c",p->data)
p=p->next
}
printf("\n")
}
void main()
{
link_list L=NULL
char x
printf("请输入链表节点:\n")
L=creat()
print(L)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)