循环链表的C语言实现

@TOC数据结构篇:循环链表的C语言实现

知识基础

知识基础包括C语言结构体,数据结构之链表。

实现的C语言代码

实现循环链表初始化、增加、删除操作。

#include<stdio.h>
#include<stdlib.h>
static int size=0;  
typedef struct Node{      //定义一个链表的结点 
	int data;
	struct Node *next;
}node,*linklist; 
void head_creat(linklist l){  //头插法建立循环链表 
	printf("请输入初始化插入数量(采用头插)"); 
	int num;                   //插入的链表数量    
	scanf("%d",&num);
	while(num--){
		linklist p;
		p=(linklist)malloc(sizeof(node));
		scanf("%d",&p->data);
		p->next=l->next;
		l->next=p;
		size++;
	} 
	linklist p=l;
	while(p->next!=NULL){
		p=p->next;
	}
	p->next=l;
}
void out_list(linklist h){    //显示链表结点值 
	linklist p=h->next;
	while(p!=h){
		printf("结点值:%d ",p->data);
		p=p->next;
	}
	printf("size is %d\n",size);
}
void dele(linklist h){   //在链表中删除值为num的结点
	 int rmnum;
     scanf("%d",&rmnum);
	 linklist p=h->next;
	 linklist q=h;
	 while(p!=h){
	 	if(p->data==rmnum){
	 		q->next=p->next;
	 		p->next=NULL;
	 		free(p);
	 		size--;
	 		break;
		 }
		 p=p->next;
		 q=q->next;
	 }

}
void inset(linklist l){  //插入结点 
	printf("请输入插入数量(采用头插)"); 
	int num;                   //插入的链表数量    
	scanf("%d",&num);
	while(num--){
		linklist p;
		p=(linklist)malloc(sizeof(node));
		scanf("%d",&p->data);
		p->next=l->next;
		l->next=p;
		size++;
	} 
	
}
int main(){
	char choose;
	linklist h;       //初始化头节点              
	h=(node*)malloc(sizeof(node));
	h->data=666; 
	h->next=NULL;
	printf("请输入选项:\nc------初始化\ni------插入\nd------删除\ns------显示\nx------退出\n"); 
	while(1){
		scanf("%c",&choose);
		switch(choose){
			case 'c':head_creat(h);break;
			case 'i':inset(h);break; 
			case 'd':dele(h);break;
			case 's':out_list(h);break;
			case 'x':return 0;
	//		default:printf("输入有误"); 
			
		}
	}
	 
} 

未完待续。。。咕咕咕。。。接下来补充循环队列的C语言实现以及循环队列和循环链表的区别。

发布了8 篇原创文章 · 获赞 11 · 访问量 266

猜你喜欢

转载自blog.csdn.net/qu1512741719/article/details/104809006