双向列表尾插
//尾删
doublelink del_last(doublelink head)
{
if(head==NULL)
{
printf("数据为空,无法尾删");
return head;
}
else if(head->next==NULL)
{
head=del_head(head);//头删即尾删
}
else
{
doublelink s=head;
while(s->next!=NULL)
{
s=s->next;
}
doublelink del=s;
s->prev->next=NULL;
free(del);
del=NULL;
return head;
}
}
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node
{
char data;
struct node *next;
struct node *prev;
}*doublelink;
typedef char datatype;
doublelink create();
doublelink del_head(doublelink head);
doublelink putout(doublelink head);
doublelink del_last(doublelink head);
doublelink insert_last(doublelink head,datatype element);
doublelink insert_head(datatype element,doublelink head);
#endif
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
int n;
doublelink head=NULL;
printf("请输入创建的元素个数:");
scanf("%d",&n);
datatype element;
for(int i=0;i<n;i++)
{
printf("请输入元素 %d element:",i+1);
getchar();
element=getchar();
//头插
head=insert_head(element,head);
}
putout(head);
//头删
head=del_head(head);
putout(head);
//尾插
printf("请输入尾插的元素element:");
getchar();
element=getchar();
insert_last(head,element);
putout(head);
//尾删
printf("尾删后结果:\n");
del_last(head);
putout(head);
return 0;
}
test.c
#include "head.h"
//创建空表
doublelink create()
{
doublelink s=(doublelink)malloc(sizeof(struct node));
if(s==NULL)
{
return NULL;
}
s->data='\0';
s->next=s;
s->prev=s;
return s;
}
//头插
doublelink insert_head(datatype element,doublelink head)
{
doublelink s=create();
s->data=element;
//为空
if(head==NULL)
{
head=s;
}
else
{
doublelink p=head;
while(p->next!=head)
{
p=p->next;
}
s->next=head;
head->prev=s;
p->next=s;
s->prev=p;
head=s;
}
return head;
}
//遍历(逆向)
doublelink putout(doublelink head)
{
doublelink p=head;
if(head==NULL)
printf("数据为空");
else
{
do{
printf("%c",p->data);
putchar(32);
p=p->next;
}while(p!=head);
}
putchar(10);
return head;
}
//头删除
doublelink del_head(doublelink head)
{
if(head==NULL)
{
return NULL;
}
else if(head->next==head)
{
free(head);
head=NULL;
return head;
}
else
{
doublelink rear=head;
while(rear->next!=head)
{
rear=rear->next;
}
doublelink s=head;
head=head->next;
head->prev=rear;
rear->next=head;
free(s);
s=NULL;
return head;
}
}
//尾插
doublelink insert_last(doublelink head,datatype element)
{
if(head==0)
{
head=insert_head(element,head);
}
else
{
doublelink rear=head;
while(rear->next!=head)
{
rear=rear->next;
}
doublelink p=create();
p->data=element;
p->prev=rear;
rear->next=p;
p->next=head;
head->prev=p;
return head;
}
}
//尾删
doublelink del_last(doublelink head)
{
if(head==NULL)
{
printf("数据为空,无法尾删");
return head;
}
else if(head->next==head)
{
head=del_head(head);//头删即尾删
}
else
{
doublelink del=head;
while(del->next!=head)
{
del=del->next;
}
del->prev->next=head;
head->prev=del->prev;
free(del);
del=NULL;
return head;
}
}
1143

被折叠的 条评论
为什么被折叠?



