69,373
社区成员
发帖
与我相关
我的任务
分享
//请今后要用
char c;
scanf("%c",&c);
//时,都改为
char s[2];
char c;
scanf("%1s",s);
c=s[0];
//自动跳过一个或多个空格或Tab字符或回车换行,读取下一个字符。
#include<stdlib.h>
#include<stdio.h>
//声明循环链表结构体
typedef struct node
{int data;
char name[10];
char sex;
int age;
struct node *next;
}node;
struct node stu;
//创建单循环链表
node *Creatlist(node *h,int n)
{ node *p,*q;//创建两个结点指针
int S;
h=(node*)malloc(sizeof(node));//分配动态存储空间
h->next=NULL;//h指向下一个元素结点为空,确定*h是头结点指针
q=h;//将头结点的数据赋给q
for(S=n;S>0;S--)//遍历整个链表
{
p=(node*)malloc(sizeof(node));//分配动态存储空间
scanf("%d %s %c %d",&p->data,p->name,&p->sex,&p->age);//输入p的数值
p->next=q->next;//指针*q跟着*p后面,一个接一个插入
q->next=p;
q=p;//把p的值再传给q
}
q->next=h->next;//从链表中删除
free(h);//释放头结点*h
return q->next;//形成单循环链表
}
//执行出列操作
void Printlist(node *h)
{node *p,*q;
p=h;//找到第M个人所在位置
while(p->next!=h)//当*p不再指向头结点时 ,即找到要出列人的位置
{printf("%d",p->data);
p=p->next;
}
printf("%d ",p->data);
printf("\n");
free(p);
p=NULL;
while(q->next!=NULL)//当*q不再指向空结点时,即找到剩余人的位置
{printf("\t\t\t编号\t\t\t姓名\t\t\t性别\t\t\t年龄\n");
for(q=h;q!=NULL;q=q->next)
printf("\t\t\t%d\t\t\t%s\t\t\t%c\t\t\t%d\n",q->data,q->name,q->sex,q->age);
}
}
//约瑟夫环
void YueSeFuHuan(node *h,int S,int n)
{node *p,*q;
int M,m,e;
p=h;
for(M=1;M<S;M++)
{
p=p->next;}
printf("被删除的编号:",p);
while(p->next!=p)//用循环输出链表中的元素
{for(m=1;m<n-1;m++)
{p=p->next;}
q=p->next;p->next=q->next;e=q->data;
free(q);
printf("%d ",e);
p=p->next;
}
e=p->data;
free(p);
printf("%d\n",e);
}
void input(node stu[]);//input函数声明
//主函数
int main()
{node *L;
int N,S,M,X;
{printf("输入人数N: \n");
scanf("%d",&N);
node stu[N];//*p=stu;//定义结构体数组和指针
input(stu);//调用input函数
printf(stu);
}
printf("输入每个人的编号\n");
L=Creatlist(L,N);
printf("建立的循环链表:\n");
Printlist(L);
printf("输入开始数数的人的位置:\n");
scanf("%d",&S);
printf("间隔的个数:\n");
scanf("%d",&M);
printf("输入剩余人数:\n");
scanf("%d",&X);
printf("删除的编号:\n");
YueSeFuHuan(L,S,M);
//printf("输出最后剩余的人的编号,姓名、性别和年龄:\n");
//printf("data:%d\nname:%s\nsex:%c\nage:%d\n\n",stu[].data,stu[0].name,stu[0].sex,stu[0].age);
}
void input(node stu[])//定义input函数
{
int i,N;
printf("输入各编号所对应的学生姓名,性别,年龄:\n");
for(i=0;i<N;i++)
{
scanf("%d %s %c %d",&stu[i].data,stu[i].name,stu[i].sex,&stu[i].age);
}
}