循环链表的建立,查找,删除
来源:互联网 发布:纯文字mud游戏编程 编辑:程序博客网 时间:2024/05/17 01:16
循环链表的建立,查找,删除,插入
#include <stdio.h>
#include <malloc.h>
//声明链表的结构
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//创建链表
LinkList CreateList(LinkList L,int n)
{
int c;
L->next=L;
LinkList p,m;
m=L;
printf("请依次输入要插入的数据:");
for(int i=0;i<n;i++)
{
if(scanf("%d",&c))
{
p=(LinkList) malloc (sizeof(LNode));
p->data=c;
m->next=p;
m=p;
}
}
#include <malloc.h>
//声明链表的结构
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//创建链表
LinkList CreateList(LinkList L,int n)
{
int c;
L->next=L;
LinkList p,m;
m=L;
printf("请依次输入要插入的数据:");
for(int i=0;i<n;i++)
{
if(scanf("%d",&c))
{
p=(LinkList) malloc (sizeof(LNode));
p->data=c;
m->next=p;
m=p;
}
}
m->next=L;
return L;
return L;
}
void menu()
{
printf("请输入指令:\n");
printf("输出单链表中的各元素值 1\n");
printf("在单链表中查询数据元素 2\n");
printf("在单链表中删除数据元素 3\n");
printf("在单链表中插入数据元素 4\n");
printf(" 结束程序 0\n");
printf("\n");
}
//获取某一个位置的元素
LinkList GetElem(LinkList L,int n)
{
LinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("输入的要查询数据的位置不对!");
return 0;
}
else
{
p=L;
for(int i=0;i<n;i++)
{
p=p->next;
}
return p;
}
}
//插入元素
void Insert(LinkList L,int m,int e)
{
LinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要插入数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
LinkList t,s;
s=(LinkList) malloc (sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
}
//删除链表中的元素
void Delete(LinkList L,int m)
{
void menu()
{
printf("请输入指令:\n");
printf("输出单链表中的各元素值 1\n");
printf("在单链表中查询数据元素 2\n");
printf("在单链表中删除数据元素 3\n");
printf("在单链表中插入数据元素 4\n");
printf(" 结束程序 0\n");
printf("\n");
}
//获取某一个位置的元素
LinkList GetElem(LinkList L,int n)
{
LinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(n>count)
{
printf("输入的要查询数据的位置不对!");
return 0;
}
else
{
p=L;
for(int i=0;i<n;i++)
{
p=p->next;
}
return p;
}
}
//插入元素
void Insert(LinkList L,int m,int e)
{
LinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要插入数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
LinkList t,s;
s=(LinkList) malloc (sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
}
}
//删除链表中的元素
void Delete(LinkList L,int m)
{
LinkList p;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要删除数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
LinkList q;
q=p->next;
p->next=p->next->next;
free(q);
}
}
void main()
{
printf("请输入要创建的循环链表的长度:");
int n=0,m=0,i,e;
scanf("%d",&n);
LinkList L,p;
L=(LinkList) malloc (sizeof(LNode));
L=CreateList(L,n);
menu();
do {
printf("请输入你的选择:");
scanf("%d",&m);
switch(m)
{
case 1:
p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
break;
case 2:
printf("请输入要查询与元素的位置:");
scanf("%d",&n);
LinkList t;
t=GetElem(L,n);
printf("该位置的数据为:%d",t->data);
break;
case 3:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
Delete(L,i);
break;
case 4:
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入元素:");
scanf("%d",&e);
Insert(L,i,e);
break;
case 0:
printf("已结束程序!!!\n");
break;
default:
printf("输入错误!!!\n");
break;
p=L->next;
int count=0;
while(p!=L)
{
count=count+1;
p=p->next;
}
if(m>count)
{
printf("要删除数据的位置不对!");
}
else
{
p=L;
for(int i=0;i<m-1;i++)
{
p=p->next;
}
LinkList q;
q=p->next;
p->next=p->next->next;
free(q);
}
}
void main()
{
printf("请输入要创建的循环链表的长度:");
int n=0,m=0,i,e;
scanf("%d",&n);
LinkList L,p;
L=(LinkList) malloc (sizeof(LNode));
L=CreateList(L,n);
menu();
do {
printf("请输入你的选择:");
scanf("%d",&m);
switch(m)
{
case 1:
p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
break;
case 2:
printf("请输入要查询与元素的位置:");
scanf("%d",&n);
LinkList t;
t=GetElem(L,n);
printf("该位置的数据为:%d",t->data);
break;
case 3:
printf("请输入要删除元素的位置:");
scanf("%d",&i);
Delete(L,i);
break;
case 4:
printf("请输入要插入元素的位置:");
scanf("%d",&i);
printf("请输入要插入元素:");
scanf("%d",&e);
Insert(L,i,e);
break;
case 0:
printf("已结束程序!!!\n");
break;
default:
printf("输入错误!!!\n");
break;
}
}
while(m!=0);
}
while(m!=0);
}
0 0
- 循环链表的建立,查找,删除
- 双向循环链表的建立、查找、添加、删除
- 循环链表建立、删除
- 循环单链表的初始化,建立,插入,查找,删除
- 循环单链表的初始化,建立,插入,查找,删除
- 循环单链表的初始化,建立,插入,查找,删除。
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- 链表的建立,插入,删除,查找(1)
- 线性表的建立,删除,查找
- 循环链表的建立
- 链队列的初始化,建立,插入,查找,删除
- 链栈的初始化,建立,插入,查找,删除
- 链队列的初始化,建立,插入,查找,删除。
- 顺序表的建立、插入、删除、查找、遍历操作
- C语言:动态链表的建立,查找,删除,插入功能的实现
- 建立,删除循环链表中的一个元素
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 单向链表综合实例(建立,删除,查找)
- Cartographer理论及实现浅析
- 第十五周项目D编函数求字符串长度
- 第十五周 写一个函数,将两个字符串连接
- 磨人的小妖精 别让我遇到你
- 组合模式例子
- 循环链表的建立,查找,删除
- 树莓派下安装PCA9685的python驱动程序
- 第二周- -Linear Regression with one variable
- Android里面label标签的区别
- Jquery 选择器
- android图片请求框架Fresco的使用
- php函数注释
- 仿淘宝上拉进入详情页交互的实现
- 安卓中定义滚动的TextView