双向链表的操作

转载 2016年08月30日 14:32:44
/*双向链表的操作*/

#include <QCoreApplication>
#include <stdio.h>
#include <stdlib.h>

typedef struct DoubleLinkList{
    int data;
    struct DoubleLinkList *pre;
    struct DoubleLinkList *next;
}DlinkList_Node;

/*建立双链表*/
DlinkList_Node* createDLink()
{
    DlinkList_Node *head,*p,*s;
    int x;
    head = (DlinkList_Node*)malloc(sizeof(DlinkList_Node));
    p = head;
    while(1)
    {
        printf("please inut the data: \n");
        scanf("%d",&x);
        if(x != 65535)
        {
            s = (DlinkList_Node*)malloc(sizeof(DlinkList_Node));
            s->data = x;
            s->pre = p;
            s->next = s;
            p = s;
        }
        else
        {
            printf("\n End of data input \n");

            break;
        }
    }
    p->next = NULL;
    head = head->next;
    head->pre = NULL;

    return head;
}

/*顺序反续打印链表*/
void printDLink(DlinkList_Node *head)
{
    DlinkList_Node *p,*s;
    p = head;
    printf("The positive output of two-way linked list : \n");
    while(p)
    {
        printf("%d",p->data);
        s = p;
        p = p->next;
    }
    printf("\n Reverse order output two-way linked list : \n");
    while(s)
    {
        printf("%d",s->data);
        s = s->pre;
    }
    printf("\n \n");
}

/*删除一个节点*/
DlinkList_Node* deleteDlinkList_Node(DlinkList_Node *head,int i)
{
    DlinkList_Node *p;
    p = head;
    if(p->data == i)
    {
        head = p->next;
        head->pre = NULL;
        free(p);

        return head;
    }
    while(p)
    {
        if(p->data == i)
        {
            p->pre->next = p->next;
            p->next->pre = p->pre;
            free(p);

            return head;
        }
        p = p->next;
    }
    printf("Did not find the data you want to delete \n");

    return head;
}

/*插入一个节点*/
DlinkList_Node* insertDinkList_Node(DlinkList_Node *head,int i)
{
    DlinkList_Node *p,*temp;
    p = head;
    temp = (DlinkList_Node*)malloc(sizeof(DlinkList_Node));
    temp->data = i;
    if(i<p->data)
    {
        head = temp;
        head->next = p;
        head->pre = NULL;
        p->pre = head;

        return head;
    }
    while(p != NULL && i > p->data)
    {
        p = p->next;
    }
    if(i < p->data)
    {
        temp->next = p;
        temp->pre = p->pre;
        p->pre->next = temp;
        p->pre = temp;

        return head;
    }
    else
    {
        p->next = temp;
        temp->pre = p;
        temp->next = NULL;

        return head;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    DlinkList_Node *head;
    head = createDLink();
    printDLink(head);
    head = insertDinkList_Node(head,1012);
    head = deleteDlinkList_Node(head,1991);
    printDLink(head);

    return a.exec();
}

双向链表的操作

  • 2014年02月28日 19:25
  • 5KB
  • 下载

双向链表操作

  • 2013年12月26日 15:38
  • 4KB
  • 下载

数据结构——双向链表实现,基本操作的C++版

对于循环双向链表 判断一个链表是否为空的条件为:head->next==head (头指针) 判断*p为最后一个节点的条件为:p->next=head [cpp] v...

双向链表操作

  • 2014年10月28日 11:22
  • 36KB
  • 下载

散列表碰撞的链接法解决之双向链表删除操作的代价

浣熊今天读到《算法导论》的第十一章散列表,看到中文书的第135页(英文P224~225)时,被其中的一个知识点难住,想了许久终于有了答案,故撰此文与大家分享     在散列表发生碰撞问题的时候,其中...

数据结构双向链表的各种操作

  • 2009年01月06日 22:17
  • 636KB
  • 下载

双向链表的基本操作C语言

  • 2017年05月02日 11:03
  • 172KB
  • 下载

数据结构之---c语言实现双向链表操作

数据结构之---c语言实现双向链表操作

双向链表的基本操作(python)

用python实现单链表的增删改查 #!/usr/bin/python #coding: utf-8 class Node(object): u"数据类" def __init__(self, ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:双向链表的操作
举报原因:
原因补充:

(最多只允许输入30个字)