返回顶部

收藏

C语言处理双向链表的排序问题

更多
#include <stdio.h> 
#include <stdlib.h> 

typedef struct node{ 
    int data; 
    struct node *pre; 
    struct node *next; 
} Node;

int get_int(void);
Node* get_node(void);
void insert(Node*p,Node* new_node);

int 
main()
{
    Node * p;
    Node * head = (Node*)malloc(sizeof(Node));
    head->pre = NULL;
    head->next = get_node();
    head->next->pre = head;
    printf("please enter the number 'q' to quit:");
    while (1)
    {
        p = get_node();
        p->data = get_int();
        if (p->data ==0)
            break;
        insert(head,p);
    }
    while (head->next!=NULL)
    {
        printf("%d ",head->next->data);
        head->next = head->next->next;
    }
    return 0;
}

//得到整数
int
get_int(void)
{
    int input;
    char ch;
    while (scanf("%d",&input)!=1)
    {
        while((ch=getchar())!='\n')
            putchar(input);
        printf(" is not an integer.\nPlease enter an integer value,such as 25,-178,or 3;\n");
    }
    return input;
}

//向链表插入新链
void 
insert(Node*p,Node* new_node)
{
    if (p->next->data == 0)
    {
        p->next->data = new_node->data;
        return;
    }
    Node* scan = p->next;
    while (1)
    {
        if (scan->data < new_node->data)
        {
            if (scan->next != NULL)
                scan = scan->next;
            else
            {
                scan->next = new_node;
                new_node->pre = scan;
                break;
            }
        }
        else
        {
            new_node->pre = scan->pre;
            new_node->next = scan;
            scan->pre->next = new_node;
            scan->pre = new_node;
            break;
        }
    }
}

//获得新节点
Node* 
get_node(void)
{
    Node* new_node = (Node*)malloc(sizeof(Node));
    new_node->next = NULL;
    new_node->pre = NULL;
    new_node->data = 0;
    return new_node;
}

标签:链表,排序,C语言

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. litianfeiying 发表 2014-08-06 11:56:45 彻底搞定二路归并
  2. litianfeiying 发表 2014-08-06 11:56:45 彻底搞定二路归并
  3. zhu329599788@126 发表 2016-05-25 03:52:47 C语言学生信息管理系统(动态链表版)
  4. 青鱼 发表 2016-04-04 10:12:00 堆排序\链表实现局部排序
  5. 潘魏增 发表 2007-07-09 22:03:33 C#版快速排序
  6. 青鱼 发表 2016-04-04 10:12:00 堆排序\链表实现局部排序
  7. 周兆熊 发表 2015-02-25 07:37:22 一个简单的日志系统的C代码实现
  8. 博主 发表 2011-11-22 02:43:00 使用排序法对User Story进行相对估算
  9. 博主 发表 2013-08-08 05:24:00 Template Engine for Objective-c
  10. 周兆熊 发表 2015-03-19 10:23:07 socket消息流程介绍及其C代码实现
  11. 浅墨 发表 2014-01-09 06:12:09 《Linux多线程服务端编程》总结备忘
  12. 博主 发表 2013-08-11 04:14:00 Objective-c Code Review

发表评论