gogo1979 发表于 2013-5-24 09:54:13

线性表13课 作业练习

请高手们指正。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define M 41

typedef struct s
{
          int data;
          struct s *next;

}node;

node *chushihua();                     //初始化约瑟夫环
void shuchu(node *phead);          //输出
void zisha(node *phead);             //随机输出自杀人的编号

void main()
{
          node *phead;
          int i=1;

          phead=chushihua();
          shuchu(phead);
          zisha(phead);
          
}

node *chushihua()               //初始化约瑟夫环
{
          node *head,*p,*p1;
          int i;

          head=p=p1=NULL;
      for(i=1; i<=M; i++)
          {
                      p=(node *)malloc(sizeof(node));
                        if(i==1)
                        {
                                head=p;
                                  p->data =i;
                        }
                        else
                        {
                                p1->next =p;
                                  p->data =i;
                        }
                       p1=p;
          }
          p->next =head;
          return head;

}

void shuchu(node *phead)          //输出
{
          node *p=phead;
          
          do
          {
                      printf("%5d",p->data );
                        p=p->next ;
          }
         while(phead!=p );
         printf("\n\n");
}

void zisha(node *phead)                      //随机输出自杀人的编号
{
          int i,n,x=0,j;
          node *p=phead,*ptemp;

          while(p!=p->next)
          {
                       do
                        {
                                  printf("请输入每数几个人开始自杀:");
                                  scanf("%d",&n);
                                if(n<=0)
                                  {
                                            printf("你输入的有误请重新输入\n\n");
                                  }             
                        }
                      while(n<=0);

                      if(n==1)
                        {
                                for(j=1; j<M-x; j++)
                                  {
                                        p=p->next ;
                                  }
                        }
                        else
                        {
                                for(i=1; i<n-1; i++)
                                  {
                                            p=p->next ;
                                  }
                        }
                        printf("%d号自杀去\n\n",p->next->data);
                        ptemp=p->next;
                        p->next=ptemp->next;
                        free(ptemp);
                        x++;                        //表示删除链表的个数
                        p=p->next;       
          }
          printf("%d号自杀去\n\n",p->data);
}

lsh華 发表于 2013-5-24 13:30:54

我只是路过打酱油的。

路遥梦远虫在走 发表于 2013-5-24 13:49:17

强烈支持楼主ing……

bafengao 发表于 2013-5-24 14:55:54

感恩无私的分享与奉献 :)

bafengao 发表于 2013-5-24 14:58:45

感恩无私的分享与奉献 :)

bafengao 发表于 2013-5-24 21:42:52

强烈支持楼主ing……
页: [1]
查看完整版本: 线性表13课 作业练习