数据结构学习心得——双链表和循环链表

双链表

若要寻查结点的前驱,则需要从表头指针出发。为了克服单链表这种单向性的缺点,可以利用双链表。顾名思义,在双链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。
数据结构学习心得——双链表和循环链表_第1张图片

循环链表

循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点。
数据结构学习心得——双链表和循环链表_第2张图片

代码实现

这里的代码只实现了创建部分的代码,其他的一些查找,删除,添加操作,请参照上一篇博客单链表操作部分,基本上差不多少。
连接:http://blog.csdn.net/u012350430/article/details/77338132

#include 

using namespace std;

typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode;

typedef struct DLNode
{
    int data;
    struct DLNode *prior;
    struct DLNode *next;
}DLNode;

//双链表的创建同样有尾插法和头插法两种创建方法
//这里使用的是尾插法
void createDlist(DLNode *&L,int a[],int n)
{
    DLNode *q;
    DLNode *p = L;
    int i;
    for(i=0;inew DLNode;
        q->data = a[i];
        p->next = q;
        q->prior = p;
        p = q;
    }
    p->next = NULL;
}

//用尾插法创建循环链表
void createList(LNode *&L,int a[],int n)
{
    LNode *q;
    LNode *p = L;
    int i;
    for(i=0;inew LNode;
        q->data = a[i];
        p->next = q;
        p = q;
    }
    p->next = L;
}

//输出双链表中所有元素的值
void printDList(DLNode *head)
{
    DLNode *p = head->next;
    while(p!=NULL)
    {
        cout<data<<" ";
        p=p->next;
    }
    cout<//输出循环链表中的所有元素
void printList(LNode *head,int n)
{
    int i;
    LNode *p = head->next;
    for(i=0;icout<data<<" ";
        p=p->next;
    }
    cout<int main()
{
    DLNode *Dhead = new DLNode;
    Dhead->next = NULL;
    Dhead->prior = NULL;

    LNode *head = new LNode;
    head->next = NULL;
    int a[6]={2,3,4,7,9,8};

    createDlist(Dhead,a,6);
    createList(head,a,6);

    printDList(Dhead);
    printList(head,6);
    return 0;
}

代码运行截图:
数据结构学习心得——双链表和循环链表_第3张图片

你可能感兴趣的:(数据结构,数据结构学习心得)