双向链表
来源:互联网 发布:手机淘宝编辑宝贝图片 编辑:程序博客网 时间:2024/05/02 04:31
#include <stdio.h>
#include <malloc.h>
typedef struct DuLnode {
int data;
struct DuLnode *prior;
struct DuLnode *next;
}DuLnode,*DuLinkList;//定义双向链表
void Create_DuLinkList(DuLinkList &L)
{
L=(DuLinkList)malloc (sizeof(DuLnode));
int j=0;
DuLinkList q;
q=L;
L->prior=NULL;
L->next=NULL;
printf("请输入链表中的5个元素:");
for(int i=1;i<=5;i++)
{
DuLinkList p=(DuLinkList)malloc (sizeof(DuLinkList));
p->next=NULL;
p->prior=q;
q->next=p;
scanf("%d",&p->data);
q=q->next;
j++;
}
}//初始化双向链表
void Print_DuLinkList(DuLinkList L)
{
DuLinkList p=L->next;
printf("输出双向链表:");
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}//输出双向链表
void Clear_DuLinkList(DuLinkList L)
{
L->next=NULL;
}//将双向链表置空
void Empty_DuLinkList(DuLinkList L)
{
if(L->next) printf("双向链表非空/n");
else printf("双向链表空/n");
}//判断双向链表是不是空表
int Length_DuLinkList(DuLinkList L)
{
DuLinkList p=L;
int j=0;
while (p->next)
{
p=p->next;
j++;
}
return j;
}//求双向链表的长度
void GetElem_DuLinkList(DuLinkList L,int i,int &e)
{
DuLinkList p=L->next;
int j=1;//计数器
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i) printf("error/n");//第i个元素不存在
e=p->data;//取第i个元素
}//取双向链表中第i个元素
void Delete_DuLinkList(DuLinkList &L,int i,int &e)
{
DuLinkList p=L->next;
int j=1;//计数器
while (p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j>i-1) printf("error1/n");
DuLinkList q=p->next;
p->next=q->next;
q->next->prior=p;
e=q->data;//存储删除的元素
free(q);//释放删除的空间
}//删除双向链表中第i个元素
void Insert_DuLinkList(DuLinkList &L,int i,int e)
{
DuLinkList p=L->next;
int j=1;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(!p||j<i-1) printf("error2/n");
DuLinkList s=(DuLinkList)malloc(sizeof(DuLnode));
s->data=e;
s->next =p->next ;
p->next->prior =s;
s->prior=p;
p->next=s;
}//在双向链表的第i个元素前插入e
int Locate_DuLinkList(DuLinkList L,int e)
{
DuLinkList p=L->next;
int j=1;
while(p->data!=e&&p->next)
{
p=p->next;
j++;
}
if(!p)
{
printf("无当前元素/n");
return 0;
}
if(p->data=e) return j;
else
{
printf("无当前元素/n");
return 0;
}
}//找到元素e的位置
main()
{
int a;//表长
int b;//所取元素
int c;//删除元素
int d;//元素6的位置
DuLinkList La;//创建双向链表
Create_DuLinkList(La);//初始化双向链表
Empty_DuLinkList(La);//判断双向链表是不是为空
a=Length_DuLinkList(La);//求双向链表的长度
GetElem_DuLinkList(La,3,b);//取双向链表中的第3个元素
Delete_DuLinkList(La,3,c);//删除第3个元素(出现了未知异常)
Insert_DuLinkList(La,3,5);//在第3个元素前插入5
printf("b=%d,c=%d,d=%d",b,c,d);
printf("a=%d",a);
Print_DuLinkList(La);
return 0;
}
- SzNOI 双向约瑟夫(双向链表)
- 双向链表&&堆栈
- 双向链表
- 使用双向链表
- 双向链表
- 双向循环链表
- 双向循环链表
- 双向链表
- 实现双向链表
- 双向循环链表
- 建立双向链表
- 双向链表
- 双向链表
- 双向循环链表
- 双向链表
- 链表-双向链表
- 双向链表
- 双向动态链表
- (下载)C#设计模式电子书(包括示例)和ASP.NET服务器控件与组件开发
- c++中内联汇编
- MySpace日本发布视频共享 正酝酿进军中国
- 拷贝复制文件夹
- 找规律:墨菲定律、欧姆定律、帕金森定律、马太效应
- 双向链表
- 数据类型
- ASP编程入门进阶(十五):组件Counters
- Delphi与Excel的亲密接触
- ERP系统验收时测试流程方法及内容[4]
- c++问题
- 配置jdk
- 栈的顺序存储
- 遍历文件夹