数据结构基础4_双链表的实现
来源:互联网 发布:tb复刻比较好的淘宝店 编辑:程序博客网 时间:2024/05/21 17:55
typedef int ElemType;
typedef int Status;
#define true 1
#define false 0
typedef struct Dnode{
ElemType data;
struct Dnode *pre;
struct Dnode *next;
}Dnode,*linklist;
Status Initlist(linklist &L)
{
Dnode *p;
p=(linklist)malloc(sizeof(Dnode));
if(!p)
{
return false;
}
p->pre=p->next=p;
L=p;
for(int i=5;i>0;i--)
{ int k;
scanf("%d",&k);
Dnode *q;
q=(linklist)malloc(sizeof(Dnode));
q->data=k;
q->next=L->next;
L->next->pre=q;
L->next=q;
q->pre=L;
}
return true;
}
Status Destroylist(linklist &L)
{
free(L);
L->pre=L->next=NULL;
}
Status Clearlist(linklist &L)
{
L->next=L->pre;
L->next=NULL;
}
Status Listempty(linklist L)
{
Dnode *p=L;
if(p->next==NULL)
{
return true;
}
else
return false;
}
Status Listlength(linklist L)
{
Dnode *p=L->next;
int i=1;
while(p->next!=L)
{
i++;
p=p->next;
}
return i;
}
Dnode *Getelem(linklist L,int i)
{
Dnode *q=L;
int j=1;
while(q->next!=L&&j<i)
{
j++;
q=q->next;
}
if(!q||j>i)
{
return false;
}
return q;
}
Status Listinsert(linklist &L,int i,ElemType e)
{
Dnode *p,*s;
p=Getelem(L,i);
/*
if(!(p=Getelem(L,i)))
{
return false;
}*/
s=(linklist)malloc(sizeof(Dnode));
if(!s)
{
return false;
}
s->data=e;
s->next=p->next;
p->next->pre=s;
p->next=s;
s->pre=p;
return true;
}
Status Listdelete(linklist &L,int i,ElemType &e)
{
Dnode *p;
p=Getelem(L,i);
if(!(p=Getelem(L,i)))
{
return false;
}
e=p->data;
p->pre->next=p->next;
p->next->pre=p->pre;
free(p);
return true;
}
int Listtraverse(linklist L)
{
Dnode *p=L->next;
while(p!=L)
{
printf("%d",p->data);
p=p->next;
}
}
typedef int Status;
#define true 1
#define false 0
typedef struct Dnode{
ElemType data;
struct Dnode *pre;
struct Dnode *next;
}Dnode,*linklist;
Status Initlist(linklist &L)
{
Dnode *p;
p=(linklist)malloc(sizeof(Dnode));
if(!p)
{
return false;
}
p->pre=p->next=p;
L=p;
for(int i=5;i>0;i--)
{ int k;
scanf("%d",&k);
Dnode *q;
q=(linklist)malloc(sizeof(Dnode));
q->data=k;
q->next=L->next;
L->next->pre=q;
L->next=q;
q->pre=L;
}
return true;
}
Status Destroylist(linklist &L)
{
free(L);
L->pre=L->next=NULL;
}
Status Clearlist(linklist &L)
{
L->next=L->pre;
L->next=NULL;
}
Status Listempty(linklist L)
{
Dnode *p=L;
if(p->next==NULL)
{
return true;
}
else
return false;
}
Status Listlength(linklist L)
{
Dnode *p=L->next;
int i=1;
while(p->next!=L)
{
i++;
p=p->next;
}
return i;
}
Dnode *Getelem(linklist L,int i)
{
Dnode *q=L;
int j=1;
while(q->next!=L&&j<i)
{
j++;
q=q->next;
}
if(!q||j>i)
{
return false;
}
return q;
}
Status Listinsert(linklist &L,int i,ElemType e)
{
Dnode *p,*s;
p=Getelem(L,i);
/*
if(!(p=Getelem(L,i)))
{
return false;
}*/
s=(linklist)malloc(sizeof(Dnode));
if(!s)
{
return false;
}
s->data=e;
s->next=p->next;
p->next->pre=s;
p->next=s;
s->pre=p;
return true;
}
Status Listdelete(linklist &L,int i,ElemType &e)
{
Dnode *p;
p=Getelem(L,i);
if(!(p=Getelem(L,i)))
{
return false;
}
e=p->data;
p->pre->next=p->next;
p->next->pre=p->pre;
free(p);
return true;
}
int Listtraverse(linklist L)
{
Dnode *p=L->next;
while(p!=L)
{
printf("%d",p->data);
p=p->next;
}
}
#include<iostream>#include<linklist3.h>#include<stdlib.h>#include<stdio.h>using namespace std;int main(){ linklist L; Initlist(L); Listinsert(L,1,1); Listinsert(L,2,2); Listinsert(L,3,3); int n; Listdelete(L,2,n); Listtraverse(L); system("pause"); }
0 0
- 数据结构基础4_双链表的实现
- 数据结构基础2_单链表的实现
- 数据结构基础5_顺序栈的实现
- 数据结构基础6_链栈的实现
- 数据结构基础7_链队的实现
- 基础数据结构_模板
- 数据结构基础8_循环队列(顺序实现)
- 数据结构的C实现_顺序表
- 数据结构的C实现_顺序栈
- 数据结构的C实现_链式队列
- 数据结构的C实现_循环队列
- 数据结构的C实现_二叉树
- 数据结构的C实现_循环队列
- 数据结构_串_串的一些操作_C++实现
- 数据结构的C实现_图_邻接矩阵表示
- 数据结构的C实现_图_邻接表表示
- 数据结构的C实现_图_邻接表示
- 数据结构基础_二分法查找
- 数据结构-链表
- Prim实现最小生成树
- 笔试题——数据库索引的作用
- 关于java中有符号数转换成无符号数的相关问题
- 黑马程序员_JAVA之IO流的(字节流与字符流)
- 数据结构基础4_双链表的实现
- C#日期时间
- lintcode-木材加工-183
- C++primer学习:文本查询程序
- UFT的工作原理--我自己的理解
- 指令缓存
- 内存分配策略
- PostgreSQL性能优化综合案例讲解 - 1
- 黑马程序员——Java基础语法(二)