0

以下代码是在创建链表后对其进行排序。使用的排序算法有点类似于冒泡排序。我正在检查两个连续的节点并在必要时交换它们。我使用了调试器,它告诉我在对排序时使用的循环进行条件检查时引发了故障。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

using namespace std;

struct link_list
{
       char value[20];
       struct link_list *next;
};

int main()
{
    struct link_list *head=NULL;
    int i,j;
    char input[20];
    char ch;
    struct link_list *loop_var,*temp2,*prev_node,*temp4=NULL;
    temp3=NULL;
    do
    {
        cout<<"\nEnter the string you want to insert";
        cin>>input;

        cout<<"\nDo you want to continue entering?";
        cin>>ch;

        if  (head==NULL)
        {
            head=new link_list;
            strcpy(head->value,input);
            head->next=NULL;
            continue;
        }
        for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next);
        temp2=new link_list;
        loop_var->next=temp2;
        strcpy(temp2->value,input);
        temp2->next=NULL;
    }while(ch=='y' || ch=='Y');

    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<loop_var->value<<"\n";
    }
    cout<<loop_var->value<<"\n";

    char arr[20];

    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<"\nLoop1";
        for (temp4=head;temp4->next!=NULL;temp4=temp4->next)
        {
            cout<<"\nLoop2";
            temp2=temp4;
            if  (strcmp(temp2->value,temp2->next->value)>0)
            {
                cout<<"\nSwap Enter";

                if  (temp2==head && temp2->next->next==NULL)
                {
                    cout<<"\nSpecial1";
                    temp2->next->next=temp;
                    temp2->next=NULL;
                }
                else if (temp2==head)
                {
                     cout<<"\nSpecial2";
                     head=temp2->next;
                     temp2->next=head->next;
                     head->next=temp2;
                }
                else if (temp2->next->next==NULL)
                {
                     cout<<"\nSpecial3";
                     prev_node->next=temp2->next;
                     prev_node->next->next=temp2;
                     temp2->next=NULL;
                }
                else
                {
                    cout<<"\nNormal1";
                    prev_node->next=temp2->next;
                    temp2->next=prev_node->next->next;
                    prev_node->next->next=temp2;
                    cout<<"\nNormal2";
                }
            }
            prev_node=temp4; 
            cout<<"\nLoop2PreExit";
            fflush(stdin);
            cout<<"\nLoop2Exit";
        }
        cout<<"\nLoop1Exit";
    }
    for (loop_var=head;loop_var->next!=NULL;loop_var=loop_var->next)
    {
        cout<<loop_var->value<<"\n";
    }
    cout<<loop_var->value;
    getch();
}
4

1 回答 1

0
                    temp2->next->next=temp;

“temp”没有在任何地方定义......如果你的编译器为你填补了那个洞,那么这就是导致你的循环条件出现段错误的原因。

此外,将所有其他变量命名为“temp#”是出现此类错误的一种简单方法。

于 2012-07-30T12:34:37.390 回答