/*(2)链表*/
/*1.循环双链表*/
/*①定义*/
typedef struct LNode{
ElementType data;
struct LNode *next,*prior;
}LNode;
/*②操作*/
LNode *CreateLNode(){
LNode *newnode=malloc(sizeof(LNode));
newnode->next=newnode;
newnode->prior=newnode;
return newnode;
}
void LinkList_HeadInsert(LNode *head,ElementType e){
LNode *newnode=CreateLNode();
newnode->data=e;
if(head->next==head&&head->prior==head){
newnode->next=head;
newnode->prior=head;
head->next=newnode;
head->prior=newnode;
}else{
newnode->next=head->next;
newnode->prior=head;
head->next->prior=newnode;
head->next=newnode;
}
}
void LinkList_DeleteLNode(LNode *deleteLNode){
deleteLNode->prior->next=deleteLNode->next;
deleteLNode->next->prior=deleteLNode->prior;
free(deleteLNode);
}
LNode *LinkList_Locate(LNode *head,ElementType e){/*头插法下顺序查找*/
if(head->next==head&&head->prior==head) return NULL;
LNode *p=head->prior;
while (p!=head)
{
if(p->data==e) break;
p=p->prior;
}
return p;
}
void LinkList_HeadInsertRead(LNode *head){
if(head->next==head&&head->prior==head)
printf("链表为空!");
else{
LNode *p=head->prior;
while (p!=head->next)
{
printf("%d ",p->data);
p=p->prior;
}
printf("%d\n",p->data);
}
}
void LinkList_Destroy(LNode *head){
LNode *s,*p;
p=head->next;
while (p!=head){
s=p;
p=p->next;
free(s);
}
free(head);
}
int main()
{
LNode *head=CreateLNode();
int a[]={1,2,3,4};
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
LinkList_HeadInsert(head,a[i]);
}
LinkList_HeadInsertRead(head);
LinkList_DeleteLNode(LinkList_Locate(head,1));
LinkList_HeadInsertRead(head);
LinkList_Destroy(head);
return 0;
}