大家好,我是一童,今天分享用链表实现猜数字小游戏和经典割白菜;本来这是算法中的案例,我用链表实现是为练习链表的使用,有兴趣的读者可用数组等方法实现,这里就不说了;
这两个程序都如出一辙,只是指针p1在指向结点的起始位置不同,大致过程都是构造结构体,然后一个个申请结点并赋值,形成环形链表后,最后求得所需要的结果;
- 猜数字
#include <stdio.h>//链表报数游戏
#include <stdlib.h>
struct ele
{
int num;
struct ele *next;
};
void main()
{
int n,m,i;
struct ele *head,*p1,*p2;
printf("请输入数字 n= ");
scanf("%d",&n);
printf("请输入间隔位数 m = ");
scanf("%d",&m);
head=p1=(struct ele*)malloc(sizeof(struct ele));//申请结点
head->num=1;
for(i=2;i<=n;i++)
{
p1->next=(struct ele*)malloc(sizeof(struct ele));
p1=p1->next;
p1->num=i;
}
p1->next=head;//形成环
while(n)
{
for(i=1;i<m;i++)
p1=p1->next;
p2=p1->next;
p1->next=p2->next;
printf("%d",p1->num);
free(p2);
n--;
}
}
- 割白菜
#include <stdio.h>//割白菜游戏,院子周围种了n颗白菜,从第一颗开始每隔两颗割一颗,求序列
#include <stdlib.h>
struct Cabbage//结构体存储白菜编号
{
int num;
struct Cabbage*next;
};
void main()
{
struct Cabbage*head,*p1,*p2;
int i,n;
printf("n= ");
scanf("%d",&n);
head=p1=(struct Cabbage*)malloc(sizeof(struct Cabbage));//设计链表
head->num=1;
for(i=2;i<=n;i++)
{
p1->next=(struct Cabbage*)malloc(sizeof(struct Cabbage));
p1=p1->next;
p1->num=i;
}
p1->next=head;//形成环
p1=p1->next;
while(n)//直到割完
{
for(i=0;i<2;i++)//每隔两颗
p1=p1->next;
p2=p1->next;
printf(" %d",p2->num);
p1->next=p2->next;
free(p2);
n--;
}
printf("\n");
}
若有疑问,欢迎留言!!