使用链接列表排序 [英] Sort by using linked list

查看:94
本文介绍了使用链接列表排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码.
我不完全知道链表.
我想我不使用链表.

这是使用链表的升序排序问题.首先,您应该对给定的数字进行排序,然后将新数字正确插入链接列表中.您也可以从链接列表中删除号码.

一个.参数
1)给定数字:31,1,7,7,22,10
2)可以从用户输入的新号码中接受该程序.
b.数据结构
1)struct listNode
a)int数据
b)listNodePointer rlink(正确链接)
c)listNodePointer llink(左链接)
C.菜单
1)插入编号
2)删除号码
3)退出程序

我的问题是
1.如何使用有关此代码的链表?
2.该代码正确吗?

请帮助我,我是计算机科学的初学者.

It''s my code.
I don''t know linked list exactly.
I think I dont using linked list.

This is ascending sorting problem using linked lists. First, you should sort the given numbers and then you insert a new number into linked lists properly. You can also delete a number from linked lists.

a. Parameter
1) Given numbers : 31, 1 , 7, 22, 10
2) The program can be accepted new number from user’s input.
b. Data structure
1) struct listNode
a) int data
b) listNodePointer rlink(right link)
c) listNodePointer llink(left link)
c. Menu
1) insert number
2) delete number
3) quit program

My question is
1. How do I use linked list about this code?
2. Is this code correct?

Please help me, I am beginner student of computer science.

#include<stdio.h>

int mNum=0;
int x=5;

typedef struct listnode *listNodePointer;
typedef struct listnode{
    int data;
     listNodePointer llink;
     listNodePointer rlink;
}listnode;

void mySwap(int &x, int &y){

    int tmp=0;
    tmp=x;
    x=y;
    y=tmp;
}

void sort_function(struct listnode num[], int &x){

    int i=0,j=0;

    for(i=0;i<x;i++){
        j=i;

        while(num[j].data < num[j-1].data){

            mySwap(num[j].data,num[j-1].data);


            j=j-1;

        }

        printf("Output is : ");

        for(int k=0;k-1<i;k++){

            printf(" %d",num[k].data);
        }
        printf("\n");
    }
}

void insertNum(struct listnode num[]){

    int inputNum,i;
    struct listnode nNum;

    printf("Input number you want to input :");
    scanf("%d",&inputNum);

    nNum.data=inputNum;
    printf("Output is :");
    for(i=0;i<x;i++){
        if(nNum.data>num[i].data){
            printf(" %d",num[i].data);
        }

        else
        {

            nNum.rlink=num[i-1].llink;
            nNum.llink=num[i].rlink;
            num[i-1].llink=nNum.rlink;
            num[i].rlink=nNum.llink;

            printf(" %d",nNum.data);

            for(;i<x;i++){
                printf(" %d",num[i]);
            }
            printf("\n");
            return;

        }
    }
    x++;
}

//delete fuction
void display(struct listnode num[]){

    printf("----------------------menu--------------------\n");
    printf("- 1.Insert-number\n");
    printf("- 2.Delete\n");
    printf("- 3.Quit\n");
    printf("----------------------------------------------\n");
    printf("Input menu number :");
    scanf("%d",&mNum);

    switch(mNum){

    case 1:
        printf("You select first menu.\n");
    insertNum(num);
        display(num);
        break;
    case 2:
        printf("You select second menu.\n");
//      deleteNum();
        display(num);
        break;
    case 3:
        printf("Bye Bye~\n");
        break;
    }
}

int main(){

    int i=0;

    struct listnode first={0,NULL,NULL},*lp=first.rlink,*q;
    struct listnode num[5];
    //it's given number.

    num[0].data=31;
    num[1].data=1;
    num[2].data=7;
    num[3].data=22;
    num[4].data=10;

    num[0].llink=first.rlink;
    for(i=0;i<x;i++){
    /
        num[i].rlink=num[i+1].llink;
        num[i+1].llink=num[i].rlink;
    }

    sort_function(num,x);
    display(num);
    return 0;
}

推荐答案

所以,您要我们给您的作品打分吗?让你的老师为你做.您需要充分了解它,才能从测试方法产生的输出中了解它的作用.

我已经可以快速浏览一下,告诉您您缺少从列表中删除的方法.
So, you''re asking us to grade your work? Let your teacher do that for you. You need to understand it well enough that you know it works from the output the test method produces.

I can already tell you from quickly glancing at it that you''re missing a way of deleting from the list.


这篇关于使用链接列表排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆