第二章(5).双向循环链表
来源:互联网 发布:mac安装包损坏 编辑:程序博客网 时间:2024/05/20 22:40
#include<stdio.h>
#include<stdlib.h>//和单链表类似,双向链表也可以有循环链表
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2typedef int ElemType;
typedef struct DuLNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;//在双向链表中,有些操作如ListLength,GetElem,LocateElem等仅需一个方向的指针,则他们的算法描述和线性链表相同
//但在插入和删除时有很大不同,操作是需要修改两个指针。
void InitDuLinkList(DuLinkList *L,int n)
{
DuLinkList p,q;
int i = n;*L = (DuLinkList)malloc(sizeof(DuLNode));
(*L)->next = *L;
(*L)->prior = *L;if(i == 1)
{
p = (DuLinkList)malloc(sizeof(DuLNode));
scanf("%d",&p->data);
(*L)->next = p;
p->next = (*L);
p->prior = (*L);
}
else
{
q = (*L);
while(i > 0)
{
p = (DuLinkList)malloc(sizeof(DuLNode));
scanf("%d",&p->data);
q->next = p; //q为p的前一个结点
p->prior = q;
q = p;
--i;
}
q->next = (*L);
(*L)->prior = q;
}
}void PrintDuLinkList(DuLinkList L)
{
DuLinkList p;
p = L->next;
if(!p)
{
exit(0);
}
while(p != L)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}void InsertLinkList(DuLinkList *L, int i, ElemType e) //将元素插入到第i个元素之前
{
DuLinkList p,q;
int j = 1;
p = (*L)->next;while( p != (*L) && j < i)
{
p = p->next;
++j;
}
if( p == (*L) || j > i)
{
exit(0);
}
//此时p为第i个元素结点
if(!(q = (DuLinkList)malloc(sizeof(DuLNode))))
{
exit(0);
}
q->data = e;q->prior = p->prior;
p->prior->next = q; //先插入
q->next = p; //后连链接
p->prior = q;
}ElemType DeleteLinkList(DuLinkList *L, int i,ElemType *e)
{
DuLinkList p;
int j = 1;
p = (*L)->next;while( p != (*L) && j < i)
{
p = p->next;
++j;
}
if( p == (*L) || j > i)
{
exit(0);
}
*e = p->data;
p->prior->next = p->next;
p->next->prior = p->prior;
return *e;
}
void main(void)
{
DuLinkList *L;
ElemType *e;
int n = 5;L = NULL;
e = NULL;L = (DuLinkList *)malloc(sizeof(DuLinkList));
e = (ElemType *)malloc(sizeof(ElemType));InitDuLinkList(L,n);
PrintDuLinkList(*L);
InsertLinkList(L,2,33);
PrintDuLinkList(*L);
printf("%d\n",DeleteLinkList(L,2,e));
PrintDuLinkList(*L);
}
- 第二章(5).双向循环链表
- 数据结构(第二天) 双向循环链表
- 第二章 线 性 表(顺序表、单链表、静态链表、循环链表、双向链表)
- 数据结构编程笔记六:第二章 线性表 双向循环链表的实现
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 双向循环链表
- 第二章(1).线性表
- java面向对象的三大特性之继承
- 第二章(2).链表
- 第二章(4).循环链表
- Oracle中关于PCTFREE和PCTUSED的说明
- 第二章(5).双向循环链表
- 腾讯 2016届实习生招聘笔试
- 10句编程箴言 (转)
- HDOJ Can you find it? 2141(二分搜索)
- 【引用】C/C++中指针和引用之相关问题研究
- Android百度地图学习笔记(三)---地理编码
- jquery选择器的空格问题
- 提问的智慧
- 腾讯的开放