循环链表的建立,查找,删除

来源:互联网 发布:纯文字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;
 }
}
m->next=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)
{
  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;
 }
 }
 while(m!=0);
   
}
0 0
原创粉丝点击