您的位置:首页 > 理论基础 > 数据结构算法

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

2017-08-22 17:25 246 查看

双链表

若要寻查结点的前驱,则需要从表头指针出发。为了克服单链表这种单向性的缺点,可以利用双链表。顾名思义,在双链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。



循环链表

循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他结点。



代码实现

这里的代码只实现了创建部分的代码,其他的一些查找,删除,添加操作,请参照上一篇博客单链表操作部分,基本上差不多少。

连接:http://blog.csdn.net/u012350430/article/details/77338132

#include <iostream>

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;i<n;i++)
{
q = new 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;i<n;i++)
{
q = new 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<<p->data<<" ";
p=p->next;
}
cout<<endl;
}

//输出循环链表中的所有元素
void printList(LNode *head,int n)
{
int i;
LNode *p = head->next;
for(i=0;i<n;i++)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}

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;
}


代码运行截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: