栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

双向链表之C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

双向链表之C语言

#include 
#include 

struct node 
{
	int data;
	struct node * p_next;
	struct node * p_preo;
};

typedef struct link
{	
	struct node head;
	struct node tail;
	struct link * p_link;
}link;

void link_init(link * link_p)
{
	link_p->head.p_next=&link_p->tail;
	link_p->head.p_preo=NULL;
	link_p->tail.p_preo=&link_p->head;
	link_p->tail.p_next=NULL;
}

void link_clean(link * link_p)
{
	struct node * front=NULL,*middle=NULL ,*last=NULL ,* nonius=NULL;	

	nonius=&link_p->head;
	int count =0;

	while(nonius->p_next!=NULL)
	{
		front=nonius;
		middle=front->p_next;
		last=middle->p_next;	
		if(middle!=&link_p->tail)
		{
			free(middle);
			middle=NULL;
			front->p_next=last;
			last->p_preo=front;
			count++;
			nonius=nonius->p_next;

			if(last->p_next!=NULL)
			{
				nonius=&link_p->head;
			}

		}

	}
}

int link_line_add(link * link_p ,int number)
{

	struct node * front=NULL,*middle=NULL ,*last=NULL ,* nonius=NULL;
	struct node *new = (struct node *)malloc (sizeof(struct node));
	if(new==NULL)
	{
		printf("malloc data  failed ! n");
		return -1;
	}	
	new->p_next=NULL;
	new->p_preo=NULL;
	new->data=number;

	nonius=&link_p->head;
	front=nonius;
	middle=front->p_next;
	last=middle->p_next;

	if(front->p_next==&link_p->tail)
	{
		front->p_next=new;
		new->p_preo=front;
		new->p_next=middle;
		middle->p_preo=new;
	}else
	{
		middle->p_next=new;
		new->p_preo=middle;
		new->p_next=last;
		last->p_preo=new;
	}
	return 0;
}
int link_add_max(link * link_p ,int number)
{

	struct node * front=NULL,*middle=NULL ,*last=NULL ,* nonius=NULL;
	struct node *new = (struct node *)malloc (sizeof(struct node));
	if(new==NULL)
	{
		printf("malloc data  failed ! n");
		return -1;
	}	
	new->p_next=NULL;
	new->p_preo=NULL;
	new->data=number;
	nonius=&link_p->head;

	while(nonius->p_next!=&link_p->tail)
	{
		if(nonius->p_next ==NULL)
		{
			printf("link data error n");
			return -1;
		}
		nonius=nonius->p_next;

		front=nonius;
		middle=front->p_next;
		last=middle->p_next;

		if(middle->data
			middle->p_next=new;
			new->p_preo=middle;
			new->p_next=last;
			last->p_preo=new;

			break;
		}


	}
	return 0;
}
int link_add_min(link * link_p ,int number)
{

	struct node * front=NULL,*middle=NULL ,*last=NULL ,* nonius=NULL;

	struct node *new = (struct node *)malloc (sizeof(struct node));

	if(new==NULL)
	{
		printf("malloc data  failed ! n");
		return -1;
	}

	new->p_next=NULL;
	new->p_preo=NULL;
	new->data=number;
	nonius=&link_p->head;

	while(nonius->p_next!=&link_p->tail)
	{
		if(nonius->p_next ==NULL)
		{
			printf("link data error n");
			return -1;
		}
		nonius=nonius->p_next;

		front=nonius;
		middle=front->p_next;
		last=middle->p_next;

		if(middle->data>number)
		{
			front->p_next=new;
			new->p_next=middle;
			new->p_preo=front;
			middle->p_preo=new;
			break;
		}
	}
}
int link_del_num(link* link_p,int number)
{

	struct node * front=NULL,*middle=NULL ,*last=NULL ; 
	struct node * nonius  =&link_p->head;
	while(nonius->p_next!=&link_p->tail)
	{       
		nonius=nonius->p_next;

		front=nonius;
		middle=front->p_next;
		last=middle->p_next;
		if(middle->data==number)
		{
			free(middle);
			middle=NULL;
			front->p_next=last;
			last->p_preo=front;
			printf("del %d n",number);
			break;
		}
	}
	return 0;
}
struct node  * get_number(link * link_p,int number)
{
	struct node * front=NULL,*middle=NULL ,*last=NULL ,*ret=NULL ;
	struct node * nonius  =&link_p->head;

	while(nonius->p_next!=&link_p->tail)
	{
		nonius=nonius->p_next;

		front=nonius;
		middle=front->p_next;
		last=middle->p_next;
		if(middle->data==number)
		{
			ret=middle;
			break;
		}
	}
	return   ret;
}
int  link_print(link * link_p)
{

	const struct node * front=NULL,*middle=NULL ,*last=NULL ;

	struct node * nonius  =&link_p->head;
	int tatol=0;

	printf("n ");

	while(nonius->p_next!=&link_p->tail)
	{	
		tatol++;	
		nonius=nonius->p_next;
		printf(" %d ",nonius->data);
	}
	printf(" n link tatol %d   n ",tatol);

	return 0;
}




int main(int argc,char ** argv)
{

	link link_m;
	link_init(&link_m);
	link_line_add(&link_m,10);	
	link_line_add(&link_m,11);	
	link_line_add(&link_m,12);	
	link_line_add(&link_m,13);	
	link_line_add(&link_m,14);	
	link_line_add(&link_m,15);

	link_print(&link_m);

	link_clean(&link_m);

	printf("{{{{{{{n");
	link_print(&link_m);

	printf("}}}}}}}}n");

	link_line_add(&link_m,10);	
	link_line_add(&link_m,11);	
	link_line_add(&link_m,8);	
	link_line_add(&link_m,13);	
	link_line_add(&link_m,14);	

	link_add_max(&link_m,9);

	link_add_min(&link_m,2);

	link_print(&link_m);

	link_del_num(&link_m,2);

	link_print(&link_m);

	printf("get number =  %d  n",(int)get_number(&link_m,9)->data);

	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997628.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号