首页 > 其他 > 详细

第三篇、双向链表(循环链表)

时间:2016-08-31 17:11:32      阅读:213      评论:0      收藏:0      [点我收藏+]

简介:

  在用C/C++开发系统中,我们知道用数组或者单链表来开发,如果是数据比较大的话,性能很不好,效率也不高。因此常常需要考虑系统的实用性,常常采用双向链表来开发。

示例:

1.数据

typedef struct node{

  int data;                // 数据

  struct node *last;  // 前一个数据节点 

  struct node *next;  // 后一个数据节点

}Node;

typedef struct {

  Node *head;

  Node *tail;

}LinkList;

 

2.创建链表

LinkList *createList()
{
    LinkList *list = malloc(sizeof(LinkList));
    list -> head = NULL;
    lsit ->tail = NULL;
    return list;
}


3.插入

3.1头插法

void addNodeBeHead(LinkList *list,int num)
{
    Node *p = malloc(sizeof(Node));
    p -> data = num;
    p -> last = NULL;
    P -> next = NULL;
    
    if(list - > head != NULL)
    {
        // 1.指向新的节点
      // 2.新节点的next指向原来的节点
        // 3.新节点变成头节点
        list ->head->last = p;
        node ->next = list ->head;
        list -> head = p;
    }
    else{
        list -> head = P;
        list -> tail = p;
    }
}

 

3.2尾插法

void addNodeAfterTail(LinkList *list,int num)
{
    Node *p = malloc(sizeof(Node));
    p -> data = num;
    p -> last = NULL;
    P -> next = NULL;
    
    if(list - > head != NULL)
    {
        // 1.指向新的节点
      // 2.新节点的last指向原来的节点
      // 3.新节点变成尾节点
      list ->tail->next = p;
        node ->last = list -> tail;
        list -> tail = p;
    }
    else{
        list -> head = P;
        list -> tail = p;
    }
}

4.打印链表

void printList(LinkList *list)
{
    Node *p = list -> head;
    if(p == NULL)
    {
        printf("当前为空链表");
    }else
    {
        while(p != NULL)
        {
                printf("%s",p-> data);
                p = p-> next;
        }

    }
}

 

第三篇、双向链表(循环链表)

原文:http://www.cnblogs.com/HJQ2016/p/5826684.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!