码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-31 17:11:51      阅读:129      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!