doubleLink_main.c
#include "doubleLink_head.h"
int main(int argc, const char *argv[])
{
dln head=NULL;
int n;
printf("please enter n=");
scanf("%d",&n);
for(int i=0;i<n;i++){
datatype a;
printf("the %d element:",i+1);
scanf(" %c",&a);
//head=insert_from_head(head,a);
head=insert_rear(head,a);
}
puts("");
//printf("-------------delete from head\n");
//head=delete_from_head(head);
printf("-------------delete rear\n");
head=delete_rear(head);
printf("-------------output\n");
output_dl(head);
return 0;
}
doubleLink_func.c
#include "doubleLink_head.h"
dln create_dln(){
dln node=(dln)malloc(sizeof(struct doubleLinkNode));
if(NULL==node){return NULL;}
node->data='\0';
node->next=NULL;
node->prev=NULL;
return node;
}
dln insert_from_head(dln head,datatype data){
dln node=create_dln();
if(NULL==node){return head;}
node->data=data;
if(NULL==head){
head=node;
}
else{
node->next=head;
head->prev=node;
head=node;
}
return head;
}
dln insert_rear(dln head,datatype element){
dln node=create_dln();
if(NULL==node){return head;}
node->data=element;
if(NULL==head) head=node;
else{
dln p=head;
while(p->next!=NULL){
p=p->next;
}
p->next=node;
node->prev=p;
}
return head;
}
dln delete_from_head(dln head){
if(NULL==head){return head;}
if(head->next==NULL){
free(head);
head=NULL;
return head;
}
dln del=head;
head=del->next;
del->next->prev=NULL;
free(del);
del=NULL;
return head;
}
dln delete_rear(dln head){
if(NULL==head) return head;
if(head->next==NULL){
free(head);
head=NULL;
return head;
}
dln p=head;
while(p->next!=NULL){
p=p->next;
}
p->prev->next=NULL;
free(p);
p=NULL;
return head;
}
int output_dl(dln head){
if(NULL==head) return FAILED;
dln p=head;
while(p!=NULL){
printf("%c\t",p->data);
p=p->next;
}
puts("");
return SUCCESS;
}
doubleLink_head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define datatype char
enum status{FAILED=-1,SUCCESS};
typedef struct doubleLinkNode{
datatype data;
struct doubleLinkNode *prev;
struct doubleLinkNode *next;
} *dln;
dln create_dln();
dln insert_from_head(dln head,datatype element);
dln insert_rear(dln head,datatype element);
dln delete_from_head(dln head);
dln delete_rear(dln head);
int output_dl(dln head);
#endif