@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语言实现以及循环队列和循环链表的区别。