//循环双链表
#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>
typedef int ElemType;
//定义节点类型
typedef struct LinkNode
{
LinkNode *next;
LinkNode *pre;
ElemType data;
}LinkNode,*LinkList;
//初始化头节点
LinkList InitHeadList(void)
{
LinkList L=(LinkList)malloc(sizeof(LinkNode));
L->next=L;
L->pre=L;
return L;
}
//增------头插法
bool InsertHeadList(LinkList L,ElemType data)
{
LinkList p=(LinkList)malloc(sizeof(LinkNode));
p->next=L->next;
p->pre=L;
p->data=data;
L->next->pre=p;
L->next=p;
return true;
}
//删
bool DeleteList(LinkList L,ElemType data)
{
LinkList p=L->next;
LinkList q=p;
while(p!=L)
{
if(p->data==data)
{
q=p;
p->pre->next=p->next;
p->next->pre=p->pre;
p=p->next;
free(q);
}
p=p->next;
}
return true;
}
//改 将a改成b
bool ChangeList(LinkList L,ElemType a,ElemType b)
{
LinkList p=L->next;
while(p!=L)
{
if(p->data==a)
{
p->data=b;
}
p=p->next;
}
return true;
}
//查 链表中由此元素则返回true 否则返回false
bool SelectList(LinkList L,ElemType data)
{
LinkList p=L->next;
while(p!=L)
{
if(p->data==data)
{
return true;
}
p=p->next;
}
return false;
}
//判空
bool isEmpty(LinkList L)
{
if(L->next==L)
{
printf("空\n");
return true;
}
printf("非空\n");
return false;
}
void PrintList(LinkList L)
{
LinkList p=L->next;
while(p!=L)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
int main(void)
{
LinkList L=InitHeadList();
for(int i=0;i<10;i++)
{
InsertHeadList(L,i);
}
PrintList(L);
DeleteList(L,9);
PrintList(L);
ChangeList(L,0,666);
PrintList(L);
isEmpty(L);
return 0;
}
c语言实现循环双链表
最新推荐文章于 2024-08-03 21:15:16 发布