#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define ERROR 0
#define OK 1
#define LEN sizeof(struct DulNode)
typedef char ElemType;
typedef struct DulNode
{
ElemType data;
struct DulNode *prior,*next;
}DulNode,*DuLinkList;
/*int InitList(DuLinkList L)
{
L=(DulNode *)malloc(LEN);
if(L)
{
L->prior=L->next=L;
}
else
return ERROR;
}*/
int DulNodeLength(DuLinkList L)
{
DulNode *p;
int length=0;
p=L->next;
while((p!=NULL) && (p!=L))
{
p=p->next;
length++;
}
return length;
}
int GetElem(DuLinkList L,int pos)
{
DulNode *p;
int i=0;
p=L;
while((p!=NULL) && i<pos)
{
p=p->next;
i++;
}
if(p==NULL || i!=pos) return ERROR;
printf("Get Elem:%d,%c\n",pos,p->data);
return OK;
}
DulNode *GetElemP(DuLinkList L,int pos)
{
DulNode *p;
int j=0;
p=L;
for(j=0;j<pos;j++)
p=p->next;
return p;
}
int ListInsert(DuLinkList L,int pos,char e)
{
DulNode *p,*s;
int k;
p=GetElemP(L,pos);
if(!p) return ERROR;
if(!(s=(DulNode *)malloc(LEN))) return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
p->prior=s;
s->next=p;
return OK;
}
int ListDel(DuLinkList L,int pos)
{
DulNode *p;
ElemType tmp;
int m;
printf("Delete Elem:\n");
p=GetElemP(L,pos);
if(!p) return ERROR;
tmp=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
printf("%d,%c\n",pos,tmp);
return OK;
}
void TraverseList(DuLinkList L)
{
DulNode *p;
p=L->next;
printf("TraverseList:\n");
while(p!=L)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void TraverseBack(DuLinkList L)
{
DulNode *p;
p=L->prior;
printf("TraverseBack:\n");
while(p!=L)
{
printf("%c",p->data);
p=p->prior;
}
printf("\n");
}
int main()
{
DuLinkList L=(DulNode*)malloc(LEN);
L->prior=L->next=L;
//InitList(L);
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
printf("%d\n",DulNodeLength(L));
TraverseList(L);
GetElem(L,1);
GetElem(L,2);
GetElem(L,3);
ListDel(L,2);
TraverseList(L);
TraverseBack(L);
}
双向循环链表的实现(C)
最新推荐文章于 2023-03-12 19:44:59 发布