单向循环链表

创建单向循环链表

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;
}
相关推荐
LIN-JUN-WEI1 小时前
[ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
c语言·开发语言·ide·vscode·单片机·学习·编辑器
神的孩子都在歌唱1 小时前
3423. 循环数组中相邻元素的最大差值 — day97
java·数据结构·算法
艾莉丝努力练剑3 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
黑听人3 小时前
【力扣 困难 C】115. 不同的子序列
c语言·leetcode
汤姆爱耗儿药8 小时前
专为磁盘存储设计的数据结构——B树
数据结构·b树
看到我,请让我去学习9 小时前
OpenCV编程- (图像基础处理:噪声、滤波、直方图与边缘检测)
c语言·c++·人工智能·opencv·计算机视觉
倔强的小石头_11 小时前
【C语言指南】函数指针深度解析
java·c语言·算法
许小燚16 小时前
线性表——双向链表
数据结构·链表
jz_ddk17 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
qqxhb18 小时前
零基础数据结构与算法——第四章:基础算法-排序(上)
java·数据结构·算法·冒泡·插入·选择