标题:一个出现-572662307的问题
取消只看楼主
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
结帖率:92.86%
已结贴  问题点数:20 回复次数:2 
一个出现-572662307的问题
这是我头文件,
typedef struct SingleNode
{
    ElemType data;
    struct SingleNode *next;
}SingleLinkedList, *LinkList;
void ListInitialize(SingleLinkedList**head)  /*单链表初始化*/
{
    if ((*head = (SingleLinkedList *)malloc(sizeof(SingleLinkedList))) == NULL)
        exit(1);
    (*head)->next = NULL;
}
int ListGet(SingleLinkedList *head, int i, ElemType *x)/*取序号为i的元素的值*/
{
    SingleLinkedList *p;
    int j = -1; p = head;
    while (j < i)
    {
        p = p->next;
        j++;
    }
    *x = p->data;
    return *x;
}
int ListInsert(SingleLinkedList *head, int i, ElemType x)/*插入数据元素*/
{
    SingleLinkedList *p, *q;
    int j;
    p = head;
    j = -1;
    while (p->next != NULL && j < i - 1)
    {
        p = p->next;
        j++;
    }
    if (j != i - 1)
    {
        printf("插入位置参数错");
        return 0;
    }
    if ((q = (SingleLinkedList *)malloc(sizeof(SingleLinkedList))) == NULL)
        exit(1);
    q->data = x;
    q->next = p->next;
    p->next = q;
    return 1;
}
void ListDelete(SingleLinkedList *head, int k, int m)/*删除元素*/
{    /*删除报到第m个的人,从第i个,也就是主函数的k开始*/
    SingleLinkedList *p, *r, *q;
    int j, i;
    p = head;
    j = -1;
    q = (SingleLinkedList *)malloc(sizeof(SingleLinkedList));
    for (j; j < k - 1; j++)/*将链表移到开始的位置*/
    {
        q = p;/*这一句是为了防止m=1的情况,m等于其他大于1的数,可以执行程序,m=1时,下面的操作有q,但是由于m=1;并没有进入for循环中,所以会导致没有q指针*/
        p = p->next;
    }
    while (p->next != p)
    {
        for (i = 1; i < m; i++)/*用来点到第m个人*/
        {
            q = p;
            p = p->next;
        }/*点到了,跳出循环,下面就是删除了*/
        printf("%d ", p->data);/*删除的数据*/
        r = p;
        q->next = q->next->next;
        p = p->next;/*将下一轮的起点在这里确认*/
        free(r);/*把结点空间释放*/
    }
        printf("%d ", p->data);/*还要把最后一个人的编号输出出来,要不然输出就会少一个*/
        free(p);/*把剩下最后一个结点空间释放*/
}
void ListLoop(SingleLinkedList *head)/*制作循环单链表*/
{
    LinkList p, q;
    p = head;
    while (p->next != NULL)
    {
        p = p->next;
    }
    p->next = head->next;/*这是循环的核心,尾头相连*/
}
源文件
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
#include "LinkedList.h"
#include<time.h>
int main()
{
    printf("请输入一个最大编号n:");
    int n, i, x,k,m;
    LinkList head;
    ListInitialize(&head);
    scanf("%d", &n);
    for (i = 0; i < n; i++)
        ListInsert(head, i, i + 1);/*建环*/
    ListLoop(head);/*将单链表做成循环单链表*/
    /*for (i = 0; i < 15; i++)/*这是我用于检验链表是否循环了
    {
        printf("%d ", ListGet(head, i, &x));
    }*/
    printf("请输入一个出圈数m:");
    scanf("%d", &m);
    /*srand(time(0));*/
    /*k = rand()% n+1;*/
    k = 1;
    printf("由系统自动生成开始的顺序,从第%d个人开始报数\n出圈的编号:",k);
    ListDelete(head, k, m);
    system("pause");
}
之前我的k值是随机数,没注意到有这个问题,当现在k=1,m=1的时候,就会在结果后面出现那个负数,到底是为什么呢,我检查了一下程序,没有发现问题,求大神指教
搜索更多相关主题的帖子: next head int printf 循环 
2018-10-07 22:48
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
得分:0 
回复 5楼 书生牛犊
好谢谢 我明天有空调试一下
2018-10-09 23:58
一鑫
Rank: 2
等 级:论坛游民
帖 子:111
专家分:12
注 册:2018-4-12
得分:0 
回复 4楼 haidiyu
我可能表述不太清楚
2018-10-09 23:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490236-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.781754 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved