单向循环链表

创建单向循环链表

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;
}
相关推荐
半青年13 分钟前
Qt读取Excel文件的技术实现与最佳实践
c语言·c++·python·qt·c#·excel
摄殓永恒29 分钟前
出现的字母个数
数据结构·c++·算法
CodeQingqing2 小时前
C语言练手磨时间
c语言·数据结构·算法
勇闯逆流河10 小时前
【数据结构】堆
c语言·数据结构·算法
pystraf11 小时前
LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution
数据结构·c++·算法·线段树·洛谷
Nobkins12 小时前
2021ICPC四川省赛个人补题ABDHKLM
开发语言·数据结构·c++·算法·图论
jz_ddk14 小时前
[学习] RTKLib详解:rtcm2.c、rtcm3.c、rtcm3e与rtcmn.c
c语言·学习·算法
darkchink15 小时前
[LevelDB]LevelDB版本管理的黑魔法-为什么能在不锁表的情况下管理数据?
c语言·数据库·c++·oracle·数据库开发·dba·db
易只轻松熊15 小时前
C++(23):容器类<vector>
开发语言·数据结构·c++
小学生的信奥之路15 小时前
力扣1991:找到数组的中间位置(前缀和)
数据结构·算法·leetcode·前缀和·数组