aaasdfgzzy 2022-09-19 00:11 采纳率: 79.4%
浏览 75
已结题

数据结构(c语言)~出圈游戏

出圈游戏附加:每个人都有着自己对应的数值,此人出圈,按照他的数值来进行下一次的出圈循环。
错误:Print函数没有被调用

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
typedef struct data
{
    int password;//存入每个人对应的密码,按照密码数值进行出圈
    int order;//每个人的序号
    struct data *next;
}LNode,*LinkList;

LNode *InitList(LNode *L)
{
    LinkList p,q;
    int i,c=0;
    p = q = L;
    for(i=1;i<=5;i++)
    {
            p = (LNode*)malloc(sizeof(LNode));
      p->next=NULL;
            c++;
            if(c==1) L = q = p;//定义首元结点为头节点
      else
      {
                q->next = p;
                q = q->next;
      }
    }
 p->next=L; //单循环链表,最后一个节点指向头指针。
    return L;
}

void InputElem(LNode *L)
{
    LNode *p;
    p = L; 
    int i;
    for(i=1;i<=MaxSize;i++)
    {
        printf("请输入第%d个人的密码,密码上限为5:",i);
        scanf("%d",&p->password);
        p->order = i;
        p = p->next;
    }
}

LNode *DeleteElem(LNode *L,LNode *p) //传入要删除当前节点的指针
{
    LNode *q,*n;
    int j;
 q = L;
    while(1)
    {
        if(q->next==p)
  {
    n=q;
    q->next=p->next;
    p->next=NULL;
    break;
  }
   q=q->next; 
 }
 return n;    //返回删除节点的上一个节点
}

void Print(LNode *L,int n)
{
 printf("%d",&n);
    LNode *p;
    int t,i=1,j,number;
    p = L;
    if(n>5||n<0)
    {
        printf("输入错误\n");
        exit(0);
    }
 
    for(i=1;i<=n;i++)
    {
            if(i==n)
            {
        number=p->order;
        printf("%d ",number);
               n = p->password;//存放他的密码,用于进行下一轮出圈
        p=DeleteElem(L,p);//p为当前要删除的指针,返回值为指针的前一个节点。
        i=0;//重新赋初值,经历这一轮i++后为1
            }
     p=p->next;
     }
}

int main()
{
    LNode *L,*p;
        int i=0,n;
    L = InitList(L);
        p=L;
    InputElem(L);
        printf("请输入一个数字,开始退圈游戏,数字上限为5:\n");
        scanf("%d",&n);
        Print(L,n);
    return 0; 
}
  • 写回答

2条回答 默认 最新

  • 私房菜 移动开发领域优质创作者 2022-09-19 15:41
    关注

    有几点改进:

    1. InputElem 中 for(i=1;i<=MaxSize;i++) 这个最好判断p->next 是否为L
    2. InputElem 中 L->length +=1; 最好放到 InitList 中,其实你这个Length 是多余的,你要判断链表是否为空,只需要判断 L是否为null,这个Length 会让你的逻辑很乱
    3. DeleteElem 中c=p; 这个c 完全多余
      其实逻辑比较乱的,给你写了一个,仅供参考:
    LNode* pre_head = NULL;
    void initList(LNode **L)
    {
        LNode *p, *q, *L;
        p = q = *L = NULL;
    
        for (int i =0; i<MaxSize; i++) {
            p = (LNode*)malloc(sizeof(struce LNode));
            if (p == NULL) {
                break;
            } else if (*L == NULL) {
                *L = p;
                q = p;
            } else {
                q->next = p;
                q = p;
            }
    
            p->next = *L;
            pre_head = p;
        }
    }
    
    
    LNode *find(LNode **L, int n) //从L开始的第n个删除,返回前一个
    {
        LNode *p = *L;
    
        for (int i = 1; i <= n; i++) {
            if (i == n) {
                if (p == *L) { //删除第一个
                    if (pre_head != *L) {
                        pre_head->next = p->next;
                        *L = p->next;
                    } else {//最后一个被删除了
                        pre_head = NULL;
                        *L = NULL;
                    }
                } else {
                    pre_head->next = p->next;
                    *L = p->next;
                }
                break;
            }
    
            pre_head = p;
            p = p->next;
        }
        
        return p; //返回要删除的节点
    }
    
    int delete(LNode *p)
    {
       free(p);   
    }
    
    int main()
    {
        LNode *L;
        initList(&L);
        InputElem(L); //这个你自己写
        print(&L); //print() 里面调用find,然后得到下一个password,最后调用delte
        
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月29日
  • 已采纳回答 9月21日
  • 修改了问题 9月21日
  • 创建了问题 9月19日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用