我试图通过找到最大值,从其位置删除它,然后将其插入列表顶部来对链表进行排序.
我遇到的困难是实际删除和插入顶部.问题似乎是在sortList函数中包含的while循环中的if条件,但我不确定如何修复它.
任何帮助,将不胜感激.
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int num;
struct node *next;
} Node, *NodePtr;
void printList(NodePtr np);
NodePtr makeList(void);
NodePtr makeNode(int n);
NodePtr sortList(NodePtr list);
int main(void) {
NodePtr list;
printf("Enter numbers for the list (0 to end)\n");
list = makeList();
printList(list);
list = sortList(list);
printList(list);
return 0;
}
NodePtr makeList(void) {
NodePtr makeNode(int), np, top, last;
int n;
top = NULL;
if(scanf("%d", &n) != 1)n = 0;
while(n != 0) {
np = makeNode(n);
if(top …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用malloc进行实验,以查看是否可以分配所有可用内存。
我使用了以下简单程序,并有几个问题:
int main(void)
{
char * ptr;
int x = 100;
while(1)
{
ptr = (char *) malloc(x++ * sizeof(char) / 2);
printf("%p\n",ptr);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
1)为什么当使用较大的数据类型(int,unsigned long long int,long double)时,该进程将使用较少的内存,而使用较小的数据类型(int,char)将使用更多的内存?
2)运行程序时,它会在达到一定数量后停止分配内存(在Windows 7 64位系统上约为592mb,并将8GB RAM交换文件设置为系统托管)。如果输出为0,则表示NULL。为什么在达到此阈值后停止分配内存,而没有耗尽系统内存并进行交换?
我在以下文章中发现有人尝试与我做相同的事情,但是区别是他们没有看到内存使用方面的任何区别,但是我同意。 使用malloc的内存泄漏失败
我已经在Linux内核2.6.32-5-686上尝试过该代码,但结果相似。
任何帮助和解释将不胜感激。
谢谢,