2024/2/21

单向循环列表

主函数

#include <stdio.h>
#include "./13_looplinklist.h"
int main(int argc, const char *argv[])
{
	Looplinklist* head = cj_looplinklist();
	toucha_looplinklist(head,27);
	toucha_looplinklist(head,18);
	toucha_looplinklist(head,59);
	toucha_looplinklist(head,69);
	bl_looplinklist(head);
	
	weicha_looplinklist(head,270);
	weicha_looplinklist(head,180);
	bl_looplinklist(head);
	
	toushan_looplinklist(head);
	bl_looplinklist(head);

	weishan_looplinklist(head);
	bl_looplinklist(head);

	return 0;
}

功能函数

#include <stdio.h>
#include <stdlib.h>
#include "./13_looplinklist.h"
Looplinklist* cj_looplinklist(void)//创建一个空的循环链表
{
	Looplinklist* head = (Looplinklist* )malloc(sizeof(Looplinklist));
	if(head == NULL )
	{
		printf("头结点申请失败,创建单链表失败\n");
		return NULL;

	}
	head->text.len = 0;
	head->next = head;
	return head;                                                        
}
int toucha_looplinklist(Looplinklist* head,Datatype num)//头插法插入数据

{
	Looplinklist* temp = (Looplinklist* )malloc(sizeof(Looplinklist));
	if(NULL == temp)
	{
		printf("头插失败\n");
		return -1;
	}
	temp->text.data = num;
	temp->next = NULL;
	temp->next = head->next;
	head->next = temp;
	head->text.len++;
	return 0;
}

int weicha_looplinklist(Looplinklist* head, Datatype num)//尾插法插入数据
{
	Looplinklist* temp = (Looplinklist* )malloc(sizeof(Looplinklist));
	if(NULL == temp)
	{
		printf("尾插失败\n");
		return -1;
	}
	temp->next = NULL;
	temp->text.data = num;
	Looplinklist* p = head;
	while(p->next != head)
	{
		p = p->next;
	}
	p->next = temp;
	temp->next = head;
	head->text.len--;
	return 0;
}

int pankong_looplinklist(Looplinklist* head)//判空
{
	return head->next == NULL?1:0;
}


int toushan_looplinklist(Looplinklist* head)//从头部删除数据
{
	if(pankong_looplinklist(head))
	{
		printf("删除失败,链表为空\n");
		return (Datatype)-1;
	}
	Looplinklist* temp = head->next;
	head->next = head->next->next;
	free(temp);
	temp = head;
	head->text.len--;
	return 0;

}

Datatype weishan_looplinklist(Looplinklist* head)//从尾部删除数据
{
	if(pankong_looplinklist(head))
	{
		printf("删除失败,链表为空\n");
		return (Datatype)-1;
	}

	Looplinklist* temp = head;
	while(temp->next->next != head)
	{
	temp =temp->next;
	}
	free(temp->next);
	temp->next = head;
	head->text.len;
	return 0 ;
}

/*void ysf_looplinklist(Looplinklist* head1)
{

Looplinklist* p = head1;
int i;
for(i = 0;i<2 ; i++)
	


}
*/




void bl_looplinklist(Looplinklist* head)//遍历
{
	Looplinklist *p = head;
	while(p->next != head)
	{
		p = p->next;
		printf("%d ",p->text.data);
	}
	putchar(10);
	return;

}

头文件

#ifndef  __LOOP_H__
#define __LOOP_H__
typedef int Datatype;
union msg
{
    Datatype data;
    int len;
};
typedef struct node
{
    union msg text;
    struct node* next;
}Looplinklist;             


Looplinklist* cj_looplinklist(void);
int toucha_looplinklist(Looplinklist* dead,Datatype num);
int weicha_looplinklist(Looplinklist* head, Datatype num);
int pankong_looplinklist(Looplinklist* head);
void bl_looplinklist(Looplinklist* head);
int toushan_looplinklist(Looplinklist* head);
Datatype weishan_looplinklist(Looplinklist* head);
#endif

双向链表

主函数 

#include <stdio.h>
#include "./23_doublelinklist.h"
int main(int argc, const char *argv[])
{
	Doublelinklist* head = cj_dooublelinklist();
	toucha_doublelinklist(head,27);
	toucha_doublelinklist(head,59);
	toucha_doublelinklist(head,80);
	bl_doublelinklist(head);

	weicha_doublelinklist(head,270);
	weicha_doublelinklist(head,180);
	weicha_doublelinklist(head,690);
	bl_doublelinklist(head);

	wzcr_doublelinklist(head,2718,2);
	bl_doublelinklist(head);

	toushan_doublelinklist(head);
	bl_doublelinklist(head);

	weishan_doublelinklist(head);
	bl_doublelinklist(head);

	wzsc_doublelinklist(head,2);
	bl_doublelinklist(head);
	return 0;
}

功能函数

#include <stdio.h>
#include <stdlib.h>
#include "./23_doublelinklist.h"

Doublelinklist* cj_dooublelinklist(void)//创建带头结点的双链表
{
	Doublelinklist* head = malloc(sizeof(Doublelinklist));
	if(head == NULL )
	{
		printf("头结点申请失败,创建单链表失败\n");
		return NULL;

	}
	head->text.len = 0;
	head->next = NULL;
	head->prev = NULL;
	return head;
}

int pankong_doublelinklist(Doublelinklist* head)//判空
{
	return head->next == NULL?1:0;   

}

void toucha_doublelinklist(Doublelinklist* head, Datatype num)//从头部插入数据
{
	Doublelinklist* temp = (Doublelinklist*)malloc(sizeof(Doublelinklist));
	if(NULL == temp)
	{
		printf("链表创建失败\n");
		return ;
	}
	temp->text.data = num;
	temp->next = NULL;
	temp->prev = NULL;


	if(pankong_doublelinklist(head) == 1)
	{
		temp->next = head->next;
		head->next = temp;

		temp->prev = head;
	}
	else
	{
		temp->next = head->next;
		head->next = temp;

		temp->next->prev = temp;
		temp->prev = head;
	}
	head->text.len++;
	printf("插入成功\n");
	return;
}

void weicha_doublelinklist(Doublelinklist* head, Datatype num)//从尾部插入数据
{
	Doublelinklist* temp = (Doublelinklist*)malloc(sizeof(Doublelinklist));
	if(NULL == temp)
	{
		printf("链表创建失败\n");
		return ;
	}
	temp->text.data = num;
	temp->next = NULL;
	temp->prev = NULL;

	Doublelinklist *p = head;
	while(p->next != NULL)
	{
		p = p->next;
	}
	temp->next = p->next ;
	p->next = temp;
	temp->prev = p;
	head->text.len++;
	printf("插入成功\n");
	return;
}

void wzcr_doublelinklist(Doublelinklist* head, Datatype num, int pos)//按位置插入数据
{
	Doublelinklist* temp = (Doublelinklist*)malloc(sizeof(Doublelinklist));
	if(NULL == temp)
	{
		printf("链表创建失败\n");
		return ;
	}
	temp->text.data = num;
	temp->next = NULL;
	temp->prev = NULL;

	Doublelinklist*p = head;
	int i;
	for(i=0;i<pos-1;i++)
	{
		p = p->next;
	}

	if(p->next != NULL)
	{
		temp->next = p->next;
		p->next = temp;

		temp->next->prev = temp;
		temp->prev = p;
	}
	else
	{
		temp->next = NULL;
		p->next = temp;

		temp->prev = p;
	}
	head->text.len++;
	printf("插入成功\n");
	return;
}

void toushan_doublelinklist(Doublelinklist* head)//从头部删除数据
{

	if(head->next == NULL)
	{
		printf("链表为空,删除失败\n");
	}
	else
	{
		Doublelinklist *p = head->next;
		head->next = head->next->next;
		p->next->prev = head;
		free(p);
		if(p->next == NULL)
		{
			head->next = NULL;
			free(p);
		}
	}
	head->text.len--;
	printf("删除成功\n");
	return;

}
void weishan_doublelinklist(Doublelinklist* head)//删除尾部数据
{

	if(head->next == NULL)
	{
		printf("链表为空,不能删除\n");
	}
	Doublelinklist* p = head->next;
	while(p->next != NULL)
	{
		p = p->next;
	}
	p->prev->next= NULL;
	free(p);
	head->text.len--;
	printf("删除成功\n");
	return;
}
void wzsc_doublelinklist(Doublelinklist* head,int pos)//按位置删除数据
{

	if(head->next == NULL)
	{
		printf("链表为空,不能删除\n");
	}
	Doublelinklist *p = head;
	if(p->next != NULL)
	{
		for(int i= 0;i<pos;i++)
		{
			p = p->next;
		}
		p->prev->next = p->next;
		p->next->prev = p->prev;
		free(p);
	}
	else
	{
		p->prev->next = NULL;
		free(p);
	}
	printf("删除成功\n");
	head->text.len--;
	return;

}

void bl_doublelinklist(Doublelinklist* head)//遍历链表
{
	Doublelinklist *p = head;
	while(p->next != NULL )
	{
		p = p->next;
		printf("%d ", p->text.data);
	}
	putchar(10);
	return;
}

 头文件

 #ifndef  __LOOP_H__
 #define __LOOP_H__
 typedef int Datatype;
 union msg
 {
     Datatype data;        
     int len;
 };
 typedef struct node
 {
     union msg text;
     struct node* next;
	 struct node* prev;
 }Doublelinklist;            

Doublelinklist* cj_dooublelinklist(void);
void toucha_doublelinklist(Doublelinklist* head, Datatype num);
void bl_doublelinklist(Doublelinklist* head);
void weicha_doublelinklist(Doublelinklist* head, Datatype num);
void wzcr_doublelinklist(Doublelinklist* head, Datatype num, int pos);
void toushan_doublelinklist(Doublelinklist* head);
void weishan_doublelinklist(Doublelinklist* head);
void wzsc_doublelinklist(Doublelinklist* head,int pos);
#endif

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值