循环单向链表的基本操作:插入,删除,遍历,排序
程序员文章站
2022-06-04 18:56:40
...
带头结点的循环单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*Linklist;
void Initlist(Linklist &L){
L=(LNode*)malloc(sizeof(LNode));
L->next=L;
}
int Insert(Linklist &L,int i,int a){
Linklist p,q;
p=(LNode*)malloc(sizeof(LNode));
p->data=a;
q=L->next;
int j=1;
if(i==1){
while(q!=L){
q=q->next;
}
p->next=L->next;
L->next=p;
}
else if(i<1){
printf("error");
return 0;
}
else{
while(j<i-1&&q!=L){
q=q->next;
j++;
}
if(q==L){
printf("error");
return 0;
}
p->next=q->next;
q->next=p;
}
}
void See(Linklist &L){
Linklist p;
p=L->next;
while(p!=L){
printf("%d",p->data);
p=p->next;
}
}
int Delete(Linklist &L,int i){
Linklist p,q,r;
int j=1,k=1;
q=(LNode*)malloc(sizeof(LNode));
p=L;
r=L->next;
while(r!=L&&k<i){
r=r->next;
k++;
}
if(r==L){
printf("error");
return 0;
}
while(j<i){
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
}
void Sort(Linklist &L){//½µÐò
Linklist p,q;
p=L->next;
int a;
for(;p!=L;p=p->next){
for(q=p;q!=L;q=q->next){
if(q->data>p->data){
a=q->data;
q->data=p->data;
p->data=a;
}
}
}
}
main(){
Linklist L;
Initlist(L);
int i=0;
int a[5];
printf("请输入五个数:");
for(;i<5;i++){
scanf("%d",&a[i]);
Insert(L,1,a[i]);
}
//Insert(L,0,99);
See(L);
printf("\n");
Sort(L);
See(L);
}
下一篇: layui实现table加载的示例代码
推荐阅读
-
链表的创建,插入,删除,输出基本操作
-
循环单向链表的基本操作:插入,删除,遍历,排序
-
链表的创建,插入,删除,输出基本操作
-
C语言单链表的创建、插入、查找、删除、求长、排序、遍历
-
有关多种(单向,双向,循环)链表的操作----初始化,插入,输出,删除,头(尾)插法
-
单链表的基本操作(一(无头单向非循环链表增删查改实现)
-
数据结构——链表单向链表的创建插入删除遍历操作(C++实现)
-
【数据结构】双链表和循环链表的相关操作--创建-插入-删除-查找
-
数据结构(c语言版)---- 双向循环链表的创建、插入、删除、遍历等基本操作
-
(C语言、数据结构)双向链表---双向链表的初始化、尾插法的建立、插入、删除、遍历等相关操作的实现