琪阿不会编程 2021-09-10 10:11 采纳率: 0%
浏览 78

c语言实现单链表随机生成数,并求出最小值,求解决

输出数字出错,自动结束

img

代码如下:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>


#define ERROR 0

typedef int ELemType;
typedef struct Node
{
    ELemType data;
    struct Node *next ;
}Node ;
typedef struct Node *LinkList;

void CreateListHead(LinkList *L , int n )
{
    LinkList p ;
    int i ;
    srand(time(0));  //初始化随机种子
    *L = (LinkList)malloc(sizeof(Node));
    (*L)->next = NULL;        //建立带头结点的链表
    for(i = 0 ; i < n ;i++ )
    {
        p = (LinkList)malloc(sizeof(Node));
        p->data = rand()%10+1;        //随机生成100以内数
        p->next = (*L)->next;
        (*L)->next = p ;            //插到表头
    }
}

int del_min(LinkList *L , int e)
{
    LinkList min;
    LinkList p  ;
    p = (*L)->next , min = p;
    if(p==NULL)
        return ERROR;
    while(p != NULL)
    {
        if(p->data<min->data)
        {
            min = p ;
            p = p->next ;
        }
        else
        {
            p = p->next ;
        }
    }
    e = min->data;

    if((min->data)/2==0)
        free(min->next);
    else
    {
        min->data = min->next->data;
        min->next->data = e ;
    }


    return e ;

}


int  main ()
{

    printf("\n");
    LinkList L;
    int i , n , m = 1 ;
    n=10;
    CreateListHead(&L , n);

    for(i = 0 ; i<= 10 ; i++)
    {
        L= L->next;
        printf("%d",L->data);
        if(5/m==0)
            printf("\n");
        m++;

    }

    printf("\n\n");

    int e= 0 ,j;
    m=1;
    j=del_min(&L , e);

    printf("输出最小值:%d\n\n\n",j);
    for(i = 0 ; i<= 10 ; i++)
    {
        L= L->next;
        printf("%-1d",L->data);

        if(5/m==0)
            printf("\n");
        m++;

    }
    printf("\n\n");
    return 0 ;
}

求帮忙解决方法

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-09-10 10:54
    关注

    修改如下,那个函数找到最小值,供参考:

    #include<stdio.h>
    #include<malloc.h>
    #include<time.h>
    #include<stdlib.h>
    #include <crtdbg.h>
    
    #define ERROR 0
    typedef int ELemType;
    typedef struct Node
    {
        ELemType data;
        struct Node* next;
    }Node;
    typedef struct Node* LinkList;
    
    void CreateListHead(LinkList* L, int n)
    {
        LinkList p;
        int i;
        //srand(time(0));  //初始化随机种子
        (*L) = (LinkList)malloc(sizeof(Node));
        (*L)->next = NULL;        //建立带头结点的链表
        for (i = 0; i < n; i++)
        {
            p = (LinkList)malloc(sizeof(Node));
            p->data = rand() % 100 + 1;//随机生成100以内数
            p->next = (*L)->next;
            (*L)->next = p;            //插到表头
        }
    }
    int del_min(LinkList* L, int e)
    {
        LinkList min;
        LinkList p;
        p = (*L)->next, min = p;
        if (p == NULL)
            return ERROR;
        while (p != NULL)
        {
            if (p->data < min->data)
            //{
                min = p;
                //p = p->next;
            //}
            //else
            //{
            p = p->next;
            //}
        }
        e = min->data;
        //if ((min->data) / 2 == 0)
        //    free(min->next);
        //else
        //{
        //    min->data = min->next->data;
        //    min->next->data = e;
        //}
        return e;
    }
    
    int  main()
    {
        printf("\n");
        LinkList L, p;
        int i, n, m = 1;
        n = 10;
        srand((unsigned int)time(NULL));  //初始化随机种子
        CreateListHead(&L, n);
        p = L;
        for (i = 0; i < 10; i++)     //for (i = 0; i <= 10; i++)
        {
            p = p->next;
            printf("%2d ", p->data);
            if ((i + 1) % 5 == 0)     //if (5 / m == 0)
                printf("\n");
                                      //m++;
        }
        printf("\n\n");
        int e = 0, j;
                                     //m = 1;
        j = del_min(&L, e);
        printf("输出最小值:%d\n\n\n", j);
        p = L;
        for (i = 0; i < 10; i++)  //for (i = 0; i <= 10; i++)
        {
            p = p->next;
            printf("%-2d ", p->data);
            if ((i + 1) % 5 == 0)     //if (5 / m == 0)
                printf("\n");
                                      //m++;
        }
        printf("\n\n");
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月10日