【问题标题】:C:[error]linked list quicksortC:[错误]链表快速排序
【发布时间】:2018-11-06 01:12:31
【问题描述】:

我正在写链表快速排序。

void quick(NODE low,NODE High){
NODE stan=low, serch=NULL;
int pivot,temp

if(low==end || low -> Next =high || low == high){return;}

serch=stan -> Next;
pivot= stan -> data;

while(serch != high){
    if(serch -> data <= pivot){
        if(serch != pivot){
            temp= serch -> data;
            serch -> data =stan -> next ->data; 
            stan -> next ->data=temp;
        }
        stan = stan -> Next;
    }
}   
quick(low, stan);

quick(stan -> next,end);
}

但是

[错误] 初始化器无效

[错误] 在 'if' 之前需要 '='、','、';'、'asm' 或 'attribute'

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[Error] 'high' undeclared(首次在此函数中使用)

[注意] 每个未声明的标识符对于它出现的每个函数只报告一次 [错误] '->' 的类型参数无效(有 'NODE')

[错误] 二进制操作数无效!=(有 'NODE' 和 'int')

[Error] 'temp' undeclared(在此函数中首次使用)

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[错误] '->' 的类型参数无效(有 'NODE')

[错误] 'quick' 的参数 2 的类型不兼容

[注意] 预期为 'NODE' 但参数类型为 'struct NODE *'

为什么出错?

【问题讨论】:

  • 你能告诉我你使用的是哪个编译器吗?
  • C 区分大小写。另外,NODE 是什么?
  • 你也应该向我们展示你的类型
  • 与快速排序数组相比,您无法以相同的复杂度快速排序链表,因为在链表中索引元素的时间是 O(n)
  • 缺失;可变温度后

标签: c linked-list quicksort


【解决方案1】:

1.你错过了;在int pivot,temp
之后 2.low -&gt; Next =high应该是low -&gt; Next ==high你应该使用==,
3.你的参数是Highvoid quick(NODE low,NODE High),但是你使用high,你应该改变
4.我猜NODE的类型是struct,你应该使用NODE.parameter,如果你想使用-&gt;,你应该使用struct指针,所以你需要定义NODE *

【讨论】:

  • **NODE stan=low, serch=NULL; ** 无效的初始化程序错误,部分原因是什么????
  • 我不明白这部分。 4.我猜NODE的类型是struct,你应该使用NODE.parameter,如果你想使用->,你应该使用struct指针,所以你需要定义NODE *例如,你应该如何定义?
  • 结构节点*节点;这是一个struct指针,它使用->来访问参数,例如node-->a.struct NODE node use 。访问参数