#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
struct node * front;
int data;
struct node * next;
}duolist_t;
//创建
duolist_t* create_duolist()
{
duolist_t* list=malloc(sizeof(duolist_t));
list->front=NULL;
list->next=malloc(sizeof(duolist_t));
list->next->front=list;
list->next->next=NULL;
return list;
}
//盘空
int isnull_duolist(duolist_t* list)
{
if(list==NULL)
{
return 0;
}
return list->next->next==NULL;
}
//插入
int insert_duolist(duolist_t* list,int data)
{
if(list==NULL)
{
return -1;
}
//1 sai
duolist_t* newnode=malloc(sizeof(duolist_t));
newnode->data=data;
//2 gua
newnode->front=list;
newnode->next=list->next;
//3 duan
newnode->front->next=newnode;
newnode->next->front=newnode;
return 0;
}
//删除temp
int delete_duolist(duolist_t* list)
{
if(list==NULL||isnull_duolist(list))
{
return -1;
}
//1.中间变量
duolist_t* temp=list->next;
//2
temp->next->front=temp->front;
temp->front->next=temp->next;
free(temp);
return 0;
}
//打印
int print_duolist(duolist_t* list)
{
if(list==NULL||isnull_duolist(list))
{
return -1;
}
while(list->next->next!=NULL)
{
printf("%3d ",list->next->data);
list=list->next;
}
printf("\n");
return 0;
}
//查找
duolist_t* locate_duolist(duolist_t* list,int data)
{
if(list==NULL||isnull_duolist(list))
{
return NULL;
}
while(list->next->next!=NULL)
{
if(list->next->data==data)
return list;
list=list->next;
}
return NULL;
}
//逆打印
int reprint_duolist(duolist_t* list)
{
if(list==NULL||isnull_duolist(list))
{
return -1;
}
while(list->next->next!=NULL)
{
list=list->next;
}
list=list->next;
while(list->front->front!=NULL)
{
printf("%3d ",list->front->data);
list=list->front;
}
printf("\n");
return 0;
}
//长度
int length_duolist(duolist_t* list)
{
if(list==NULL||isnull_duolist(list))
{
return -1;
}
int count=0;
while(list->next->next!=NULL)
{
list=list->next;
count++;
}
return count;
}
//清空
int clear_duolist(duolist_t* list)
{
if(list==NULL||isnull_duolist(list))
{
return -1;
}
while(!isnull_duolist(list))
{
delete_duolist(list);
}
return 0;
}
//销毁
int destroy_duolist(duolist_t* list)
{
if(list==NULL)
{
return -1;
}
if(!isnull_duolist(list))
clear_duolist(list);
free(list->next);
free(list);
return 0;
}
int main(int argc, const char *argv[])
{
duolist_t* list=create_duolist();
int i;
for(i=1;i<=20;i++)
{
insert_duolist(list,i*10);
print_duolist(list);
}
if(insert_duolist(locate_duolist(list,150),250)==0)
{
print_duolist(list);
}
if(delete_duolist(locate_duolist(list,150))==0)
{
print_duolist(list);
}
reprint_duolist(list);
printf("length_duolist:%d\n",length_duolist(list));
clear_duolist(list);
printf("length_duolist:%d\n",length_duolist(list));
// destroy_duolist(list);
return 0;
}
双链表
最新推荐文章于 2024-07-11 15:29:35 发布