链表的简单使用

链表分单向链表,双向链表和循环链表
节点的插入有两种,头插法和尾插法
其中头插法是只节点从头节点处插入
尾插法指的是从链表的末尾插入

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct Node
{
	char buf[16];
	struct Node * prev;
	struct Node * next;
}Node;

Node * create_Node(void)
{
	Node *head;
	head = (Node*)malloc(sizeof(Node));
	if(head == NULL)
	{
		return NULL;
	}
	head->prev = NULL;
	head->next = NULL;
	return head;
}
void insert_Node(const char buf[],Node* head)//头插法 
{
	Node * new1;
	Node *tmp ;
	tmp = head->next;		
	new1 = (Node*)malloc(sizeof(Node));
	if(new1 == NULL)
	{
		return ;
	}
	memcpy(new1->buf,buf,16);
	new1->next = head->next;
	head->next = new1;
	new1->prev = head;
	if(tmp != NULL)//判断头节点的下一个是不是空 
	tmp->prev = new1;
	return;	
}
void insert_Node_end(const char buf[],Node * head) //尾插法 
{
	Node *new1;
	Node *tmp;
	tmp = head;
	for(;;)
	{
		if(tmp->next == NULL) break;
		tmp = tmp->next;	
	}
	new1 = (Node*)malloc(sizeof(Node));
	if(new1 == NULL)
	{
		return ;
	}
	memcpy(new1->buf,buf,16);
	tmp->next = new1;
	new1->prev = tmp;
	new1->next = NULL;
}
void print_data(Node *head)
{
	Node *tmp;
	for(tmp = head->next;;tmp = tmp->next)
	{
		printf("data is %s\n",tmp->buf);
		if(tmp->next == NULL)	break;	
	}
	return;
}


int main()
{
	Node *head;
	head = create_Node();
	insert_Node("abcdefg1",head);
	insert_Node("abcdefg2",head);
	insert_Node("abcdefg3",head);
	insert_Node("abcdefg4",head);
	insert_Node_end("abcdefg1",head);
	insert_Node_end("abcdefg2",head);
	insert_Node_end("abcdefg3",head);
	insert_Node_end("abcdefg4",head);
	print_data(head);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值