返回顶部

收藏

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. zhu329599788@126 发表 2016-05-25 03:52:47 C语言学生信息管理系统(动态链表版)
  2. 潘魏增 发表 2007-07-09 22:03:33 C#版快速排序
  3. 青鱼 发表 2016-04-04 10:12:00 堆排序\链表实现局部排序
  4. 青鱼 发表 2016-04-04 10:12:00 堆排序\链表实现局部排序
  5. litianfeiying 发表 2014-08-06 11:56:45 彻底搞定二路归并
  6. litianfeiying 发表 2014-08-06 11:56:45 彻底搞定二路归并
  7. fan 发表 2014-04-21 08:22:55 数据结构之线性表的指针实现及间接寻址方法(C语言版)
  8. 落絮飞雁 发表 2015-03-24 14:11:38 HDOJ1425:sort——排序
  9. justjavac 发表 2013-10-10 08:05:05 为什么说任何基于比较的算法将5个元素排序都需要7次?
  10. Kevin Lynx 发表 2015-05-05 11:47:00 无锁有序链表的实现
  11. lvfuyu 发表 2015-06-23 09:20:53 [hihocoder] 拓扑排序2
  12. 花生 发表 2014-06-27 09:41:14 Jenkins hash

发表评论