数据结构的C语言(类C语言)--单向循环链表--约瑟夫环

代码区

约瑟夫环:用类C语言实现!!!可以成功运行!!!不是仅仅的算法,而是实实在在的类C

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode
{
 ElemType data;
 struct LNode *next;
}LNode,*LinkList;

enum Status{ERROR,OK}; //此处使用枚举类型
Status InitList(LinkList &L,int n)//初始化
{
 LinkList p,q;
 
 L=(LinkList)malloc(sizeof(LNode));//申请头结点的空间
 L->next=NULL;    
 p=L;
 for(int i=1;i<=n;i++) //输入数据域
 {
 q=(LinkList)malloc(sizeof(LNode));
 q->data=i;  
 p->next=q;
 p=q;
 }
 p->next=L->next; //首尾连接(注意,因为头结点没有真实数据域,所以是L->next)
 return OK;
}

Status cycle_delete(LinkList L,int n)
{
 LinkList p=L,q;
 printf("the number that leaves in order are:\n");   //依次出局的数字为
 while(p->next!=p)  //当链表只有一个结点的时候(不包括头结点)
 {
  for(int i=1;i<n;i++)  //n为循环次数
  {
    p=p->next;
  }
  q=p->next;
  p->next=q->next;
  printf("%d ",q->data);
  free(q);  
 }
 printf("\n");
 printf("the last one is %d\n",p->data);
 free(p);
 return OK;
}

Status show(LinkList L)
{
  LinkList p;
  p=L->next;
  printf("look these datas\n");
  printf("%d ",p->data);
  p=p->next;
  while(p!=L->next)
  {
  printf("%d ",p->data);
  p=p->next;
  }
  printf("\n");
  return OK;
}

int main()
{
 LinkList L;
 int n,m;
 printf("enter number you want to cycle\n");
 scanf("%d",&n);
 InitList(L,n);
 show(L);

printf("enter the num you want to cycle to delete\n");
scanf("%d",&m);
cycle_delete(L,m);
return 0;
 }

测试区

数据结构的C语言(类C语言)--单向循环链表--约瑟夫环

上一篇:链表学习


下一篇:DS01--线性表