| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2259 人关注过本帖
标题:能否指点一下思路,无从下手啊……万分感谢
只看楼主 加入收藏
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
结帖率:95%
收藏
已结贴  问题点数:8 回复次数:11 
能否指点一下思路,无从下手啊……万分感谢
编写一个程序,实现对任意输入的整数进行排序。其中整数的个数n不是一个确定的数值。不能使用数组int array[n]表示,要求通过用户在程序运行中输入n的值,并采用动态分配内存的方式来为数组分配空间。
重点就是使用动态分配内存,这个使用得不熟练。
搜索更多相关主题的帖子: 动态 空间 用户 
2015-03-29 13:10
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:3 
给你一段连数组长都不用输入的代码

程序代码:
#include <stdio.h>
#include <stdlib.h>
#define SwapInt(a, b) (a) ^= (b), (b) ^= (a), (a) ^= (b)

typedef struct node {
    int data;
    struct node *next;
} ND, *PN;

void free_list(PN head) {
    PN cur = NULL;

    while(head) {
        cur = head->next;
        free(head);
        head = cur;
    }
}

int main(void) {
    PN head, p, cur;
    head = p = cur = NULL;
    puts("输入数组元素 空格分隔 非法赋值则结束输入");

    while((p = malloc(sizeof(ND))) != NULL) {
        if((scanf("%d", &(p->data))) != 1) {
            free(p);
            break;
        }

        p->next = head;
        head = p;
    }

    for(p = head; p; p = p->next) {
        for(cur = p->next; cur; cur = cur->next) {
            if(p->data > cur->data)
                SwapInt(p->data, cur->data);
        }
    }

    puts("升序排列后输出:");

    for(p = head; p; p = p->next) {
        printf("%d ", p->data);
    }

    free_list(head);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-03-29 14:14
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:3 
还是按楼主的思路再补充一下代码了


程序代码:
#include <stdio.h>
#include <stdlib.h>

#define MALLOC(p, size, type)\
    if(!(p = (type)malloc(size))) {\
        fprintf(stderr, "malloc error...");\
        exit(EXIT_FAILURE);\
    }

#define FREE(p)\
    if(p){\
        free(p);\
        p = NULL;\
    }

#define SWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
#define COMPARE(x, y) (((x) < (y)) ? -1 : ((x) == (y)) ? 0 : 1)

void sort(int list[], int n); //选择排序整数数组

int main(int argc, char **argv) {
    int i, n, *num;
    puts("输入数组长度: ");

    while((scanf("%d", &n)) != 1 || n < 1) while(getchar() != '\n');

    MALLOC(num, n * sizeof(int), int*);
    puts("输入数组元素: ");

    for(i = 0; i < n; i++)
        while((scanf("%d", num + i)) != 1) while(getchar() != '\n');

    sort(num, n);
    puts("\n排序后的数组:");

    for(i = 0; i < n; i++)
        printf("%d\t", num[i]);

    puts("");
    FREE(num);
    return 0;
}

void sort(int list[], int n) {
    int i, j, min, temp;

    for(i = 0; i < n - 1; i++) {
        min = i;

        for(j = i + 1; j < n; j++) {
            if(list[j] < list[min])
                min = j;
        }

        SWAP(list[i], list[min], temp);
    }
}

Only the Code Tells the Truth             K.I.S.S
2015-03-29 16:58
Vsnow
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:124
专家分:145
注 册:2015-1-3
收藏
得分:0 
#define MALLOC(p, size, type)\
    if(!(p = (type)malloc(size))) {\
        fprintf(stderr, "malloc error...");\
        exit(EXIT_FAILURE);\
    }
这个看不懂。需要查哪方面的资料,是define,还是malloc error,或者是其它的
2015-03-29 18:58
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
那就改成这样吧
MALLOC(num, n * sizeof(int), int*);
↓↓↓↓
if(!(num = malloc(n * sizeof(int)))) exit(EXIT_FAILURE);

Only the Code Tells the Truth             K.I.S.S
2015-03-29 19:02
Mrbusy
Rank: 1
等 级:新手上路
帖 子:3
专家分:9
注 册:2015-3-29
收藏
得分:2 
#include <stdio.h>
#include <stdlib.h>
void input(int *parray,int n)
{
    int i;
    for(i=0; i<n; i++)
        scanf("%d",parray+i);
}

void sort(int *parray,int n)
{
    int i,j;
    for(i=1; i<n; i++)
        for(j=0; j<i; j++)
        {
            if(parray[i]<parray[j])
            {
                parray[i] += parray[j];
                parray[i] -= parray[j];
                parray[i] -= parray[j];
            }
        }
}

void print(int *parray,int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        printf("%d\t",parray[i]);
    }
    printf("\n");
}

int main()
{
    int n;
    int *parray;
    scanf("%d",&n);
    parray = malloc(sizeof(int )*n);
    input(parray,n);
    sort(parray,n);
    print(parray.n);
    return 0;
}
2015-03-29 19:12
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
使用动态内存不一定使用链表,非要使用就是自找麻烦。

能编个毛线衣吗?
2015-03-29 20:24
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
回复 7楼 wmf2014
同感  直接对scanf之后的N进行动态内存分配。感觉就可以解决这个问题了

授人以鱼,不如授人以渔
2015-03-29 21:50
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
看到7、8楼的回复
很是无语……

取古人语以应之:

我本将心向明月,奈何明月照沟渠……

人心不古啊

Only the Code Tells the Truth             K.I.S.S
2015-03-29 22:10
执笔画江山
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:265
专家分:1010
注 册:2015-1-13
收藏
得分:0 
个人拙见而已 没必要这样 古人会跳出来骂你的 这么点小事都烦他  人心不古。。。。不敢苟同  你想多了

授人以鱼,不如授人以渔
2015-03-29 22:15
快速回复:能否指点一下思路,无从下手啊……万分感谢
数据加载中...
 
   



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

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