单向循环链表

创建单向循环链表

cs 复制代码
linklist create_h(){
	linklist p=(linklist)malloc(sizeof(struct Node));
	if(p==NULL)return NULL;
	p->len=0;
	p->next=p;//开始就让头节点指向自身
	return p;
}

创建节点

cs 复制代码
linklist create(){
	linklist p=(linklist)malloc(sizeof(struct Node));
	if(p==NULL)return NULL;
	p->data=0;
	p->next=NULL;
	return p;
}

头插

cs 复制代码
int insert_head(linklist p,datatype data){
	if(p==NULL)return -1;
	linklist q=create();
	if(q==NULL)return -1;
	q->next=p->next;//若是第一个元素,则q指向头节点完成循环
	p->next=q;
	q->data=data;
	p->len++;
	return 0;
}

按位置插入

cs 复制代码
int insert_index(linklist p,int index,datatype key){
	if(p==NULL||index>p->len+1||index<1){
		return -1;
	}
	linklist q=p;
	for(int i=0;i<p->len-1;i++){
		q=q->next;
	}
	linklist k=create();
	if(k==NULL)return -1;
	k->data=key;
	k->next=q->next;
	q->next=k;
	p->len++;
	return 0;
}

尾删

cs 复制代码
int dele_rear(linklist p){
	if(p==NULL||p->len==0)return -1;
	linklist q=p;
	for(int i=0;i<p->len-1;i++)
		q=q->next;
	q->next=mfree(q->next);
    q->next=p;
	p->len--;
	return 0;
}

输出

cs 复制代码
int output(linklist p){
	puts("");
	if(p==NULL||p->len==0)return -1;
	linklist q=p;
	for(int i=0;i<p->len;i++){
		q=q->next;
		printf("%d\t",q->data);
	}
	putchar(10);
	return 0;
}

按位置删

cs 复制代码
int dele_index(linklist p,int index){
	if(p==NULL||index>p->len||index<1)return -1;
	linklist q=p;
	for(int i=0;i<index-1;i++){
		q=q->next;
	}
	linklist k=q->next;
	q->next=k->next;
	k=mfree(k);
	p->len--;
	return 0;
}
相关推荐
沐晓时光3 小时前
C语言入门,字符串和字符串函数知识讲解
c语言·开发语言
智者知已应修善业10 小时前
【51单片机实现从下到上,从上到下,从中间到两边,两边到中间】2024-10-23
c语言·经验分享·笔记·单片机·嵌入式硬件·51单片机
老师我太想进步了202613 小时前
【数据结构-3】算法美学之降复杂度
数据结构·算法
布莱克60519 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
揽星河..1 天前
【C语言】底层程序设计
c语言·开发语言
w_zero_one1 天前
算法--构造
java·数据结构·算法
揽星河..1 天前
【C语言】结构体
c语言·开发语言
唐青枫1 天前
C 语言 malloc() 详解与实战 Demo
c语言
lisw051 天前
互联网上的数据结构可视化!
数据结构·信息可视化
揽星河..1 天前
【C语言】指针
c语言·开发语言