【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

双向链表的操作

转载 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();
}

举报

相关文章推荐

双向链表的一些操作

一、插入操作(insert) (一)基本原理 双链表就好像是手拉手站成一排的人,每个人的右手(next)拉着下一个人,左手(prior)拉着前一个人,每两个人之间有两支手互联.插入操作实际是向队伍...

[C++]双向链表操作

头文件--定义基类、双向链表类、结点类#include "iostream.h" #include "string.h" class Object //定义抽象类 { public: Object(){} virtual int IsEqual(Object&amp;)=0;//实现2个结点数据的比较 virtual void Show()=0;//输出一个结点的数据 virtual ~Object(){} }; class Node //结点类 { public: Node(){ Info=0;Prev

双向链表插入、删除操作

来源:http://blog.csdn.net/csdanca11/article/details/7173856

数据结构学习---基于双向链表实现的链接表

经过前面的学习,我们看到如果使用ListSLink对线性表进行每个元素的访问get(i)则需要n*n的时间,因为在使用链表实现取i号数据元素的操作时,需要将节点的引用给从链表前向后移动i次,而取i+1时又不能在上一次操作---取i好数据元素-----中受益,必须从链表前端开始定位,则访问线性表中每一个元素一次所需要的时间为n*n。这是难以接受的。 链接表可以看成是一组节点序列以及基于节点进行操作的线性结构抽象,或者说对链表的抽象。 链接表接口定义 [code="java"] package taxus.list; public interface LinkedLis

双向链表的创建和相关操作

双向链表其实是单链表的改进。     当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结...
  • jw903
  • jw903
  • 2014-08-30 21:34
  • 1064
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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