C语言,动态数组的创建存储和排序,链表好像可以实现

输入整数m,根据m的大小动态分配m个连续的单元(即动态数组),然后输入m个整数,最后升序输出。
输入示例:
5
8 2 5 6 3
输出示例:
2 3 5 6 8


#include <stdio.h>
void sort(int sz[],int number){
    int i, j, temp;
    for (i = 0; i < number-1; i++) {
        for (j = 0; j < number-i-1; j++) {
            if (sz[j] > sz[j+1]) {
                temp = sz[j];
                sz[j] = sz[j+1];
                sz[j+1] = temp;
            }
        }
    }
}
int main() {
   int number, n;
   printf("请输入数字:");
   scanf("%d", &number);
   int sz[number];
   printf("请输入number个数字:");
   //输入 
   for(n=0;n<number;n++){
       scanf("%d", &sz[n]);
   }
   //排序 
   sort(sz,number);
   //输出 
   for(n=0;n<number;n++)
       printf("%d ", sz[n]);
   return 0;
}
动态数组
scanf("%d",&n);
int *arr=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
  scanf("%d",&arr[i]);

供参考:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int m, * a, i, j, t;
    scanf("%d", &m);
    a = (int*)malloc(sizeof(int) * m);
    for (i = 0; i < m; i++)
        scanf("%d", &a[i]);
    for (i = m - 1; i > 0; i--)
        for (j = 0; j < i; j++)
            if (a[j] > a[j + 1])
            {
                t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
            }
    for (i = 0; i < m; i++)
        printf(i ? " %d" : "%d", a[i]);
    free(a);
    return 0;
}

#include<stdio.h>  
#include<malloc.h>  
int main()  
{  
    int a, i,j,r;  
    int *p, b;  
    printf("请输入一个整数:");
    scanf("%d", &a);  
    p = (int*) malloc( a*sizeof(int) );  
    printf("请输入以上整数个数:");
    for ( i = 0; i < a; i++ )  
    {  
        scanf("%d", p+i);  
    }  
    for(j=a-1; j>0; j--)   
    {  
        for(r=0; r<j; r++)  
        {  
            if(*(p+r)>*(p+r+1)) 
            {  
                b = *(p+r);  
                *(p+r) = *(p+r+1);  
                *(p+r+1) = b;  
            }  
        }  
    }  
     for ( i = 0; i < a; i++ )  
    {  
        printf("%d", *(p+i));  
    }  
    free(p);  
    return 0;  
}


【以下回答由 GPT 生成】

解决方案

首先,我们可以使用链表来实现动态数组的创建和存储。链表是由节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。我们可以使用struct结构体来定义链表节点的数据结构。

下面是一个示例代码,用于创建链表并存储输入的整数:

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

struct Node {
    int data;
    struct Node* next;
};

int main() {
    int m, i;
    printf("请输入整数m的大小:");
    scanf("%d", &m);

    // 创建头节点
    struct Node* head = NULL;
    head = (struct Node*)malloc(sizeof(struct Node));
    head->next = NULL;

    // 根据m的大小动态分配m个连续的单元,并输入m个整数
    printf("请输入%d个整数:", m);
    struct Node* current = head;
    for (i = 0; i < m; i++) {
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        scanf("%d", &(newNode->data));
        newNode->next = NULL;
        current->next = newNode;
        current = current->next;
    }

    // 输出链表的数据元素
    current = head->next;
    printf("输出链表的数据元素:");
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");

    // 释放链表的内存空间
    current = head;
    while (current != NULL) {
        struct Node* temp = current;
        current = current->next;
        free(temp);
    }
    return 0;
}

以上示例代码先提示用户输入整数m的大小,然后动态创建一个链表,并存储m个整数。最后输出链表中的数据元素。

接下来,我们可以使用链表来实现对数组的排序。常用的排序算法之一是冒泡排序。冒泡排序的基本思想是从左到右依次比较相邻的两个元素,如果逆序则交换它们的位置,直到整个数组排序完成。

下面是一个示例代码,用于在链表中实现冒泡排序:

// 冒泡排序
void bubbleSort(struct Node* head) {
    int swapped;
    struct Node* ptr1;
    struct Node* lptr = NULL;

    /* 如果链表为空,则直接返回 */
    if (head == NULL)
        return;

    do {
        swapped = 0;
        ptr1 = head->next;

        while (ptr1->next != lptr) {
            if (ptr1->data > ptr1->next->data) {
                int temp = ptr1->data;
                ptr1->data = ptr1->next->data;
                ptr1->next->data = temp;
                swapped = 1;
            }
            ptr1 = ptr1->next;
        }
        lptr = ptr1;
    } while (swapped);
}

以上示例代码定义了一个bubbleSort函数,接受一个链表头节点作为参数,在链表中实现冒泡排序。在主函数中,我们可以调用该函数来对输入的整数进行排序。

下面是完整的示例代码:

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

struct Node {
    int data;
    struct Node* next;
};

// 冒泡排序
void bubbleSort(struct Node* head) {
    int swapped;
    struct Node* ptr1;
    struct Node* lptr = NULL;

    /* 如果链表为空,则直接返回 */
    if (head == NULL)
        return;

    do {
        swapped = 0;
        ptr1 = head->next;

        while (ptr1->next != lptr) {
            if (ptr1->data > ptr1->next->data) {
                int temp = ptr1->data;
                ptr1->data = ptr1->next->data;
                ptr1->next->data = temp;
                swapped = 1;
            }
            ptr1 = ptr1->next;
        }
        lptr = ptr1;
    } while (swapped);
}

int main() {
    int m, i;
    printf("请输入整数m的大小:");
    scanf("%d", &m);

    // 创建头节点
    struct Node* head = NULL;
    head = (struct Node*)malloc(sizeof(struct Node));
    head->next = NULL;

    // 根据m的大小动态分配m个连续的单元,并输入m个整数
    printf("请输入%d个整数:", m);
    struct Node* current = head;
    for (i = 0; i < m; i++) {
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        scanf("%d", &(newNode->data));
        newNode->next = NULL;
        current->next = newNode;
        current = current->next;
    }

    // 对链表进行排序
    bubbleSort(head);

    // 输出链表的数据元素
    current = head->next;
    printf("按升序输出链表的数据元素:");
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");

    // 释放链表的内存空间
    current = head;
    while (current != NULL) {
        struct Node* temp = current;
        current = current->next;
        free(temp);
    }
    return 0;
}

以上示例代码包括创建链表、存储数据以及对数组进行排序的功能。用户首先输入整数m的大小,然后输入m个整数。程序会创建一个链表来存储输入的整数,并使用冒泡排序算法对链表中的数据进行排序。最后,程序会按升序输出链表的数据元素。

希望以上解决方案对你有所帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^