0
我必須創建一個按人數順序排列的人員列表(對於我的程序爲「no」)。我試圖通過修改addNode
函數來實現,但我沒有得到任何結果(人們不按他們的編號排列)。這是我的代碼:按遞減順序在鏈表中插入節點 - C
頁眉代碼:
#ifndef __EX__
#define __EX__
typedef struct Person{
char name[10];
float no;
struct Person *pNext;
} NODE, *pNODE, **ppNODE;
void addNode(ppNODE, pNODE);
void travers(pNODE, unsigned int*);
#endif
功能的文件夾:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <string.h>
#include "EX.h"
void addNode (ppNODE ppPrim, pNODE p){
pNODE q = (pNODE)malloc(sizeof(NODE));
assert(q!=NULL);
printf("Add name: \n");
scanf("%s", &q->name);
printf("\nAdd no: ");
scanf("%f", &q->no);
if (p == NULL || q->no < p->no) {
q->pNext = *ppPrim;
*ppPrim = q;
} else {
q->pNext = p->pNext;
p->pNext = q;
}
return;
}
void travers(pNODE pPrim, unsigned int *pLen){
*pLen = 0;
pNODE tmp = pPrim;
while (tmp != NULL){
puts (tmp->name);
fprintf(stdout, " no %.2f\n", tmp->no);
tmp = tmp->pNext;
(*pLen)++;
}
return;
}
主要文件夾:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include <string.h>
#include "EX.h"
int main(){
unsigned int len;
pNODE prim = NULL;
int i;
for (i=0; i<=1; i++){
addNode(&prim, prim);
addNode(&prim, prim->pNext);
}
travers(prim, &len);
return 0;
}
你已經在調試器中一步一步地執行了代碼嗎? 'main()'中的for循環看起來有點奇怪 - 我假設你在搜索錯誤時執行了這個操作... – Scheff
所有你需要的就是使用Insertion Sort來將你列爲優先級隊列。檢查[this](http://stackoverflow.com/questions/25437682/use-a-linked-list-to-implement-a-priority-queue) –