#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cnio.h>
using namespace std;
typedef struct student{
int data;
struct student *next;
struct student *pre;
}dnode;
//建立双链表
dnode *create(){
dnode *head,*p,*s;
int x,cycle = 1;
head = (dnode*)malloc(sizeof(dnode));
p = head;
while(cycle){
printf("\nplease input the data:);
scanf("%d",&x);
if(x!=0){
s = (dnode*)malloc(sizeof(dnode));
s->data = x;
printf("\n%d",s->data);
p->next = s;
s->pre = p;
p =s;
}else
cycle = 0;
}
head = head->next;
head->pre = NULL;
p->next = NULL;
printf("\n %d ",head->data);
return head;
}
//双链表删除节点
dnode *del(dnode *head,int num){
dnode *p1,*p2;
p1 = head;
while(num!=p1->data && p1->next != NULL){
p1 = p1->next;
}
if(num == p1->data){
if(p1==head){
head = head->next;
head->pre = NULL;
free(p1);
}else if(p1->next == NULL){
p1->pre->next = NULL;
free(p1);
}else{
p1->next->pre = p1->pre;
p1->pre->next = p1->next;
}
}else
printf("\n%d could not been found",num);
return head;
}
//双链表插入节点
dnode *insert(dnode *head,int num){
dnode *p0,*p1;
p1 = head;
p0 = (dnode*)malloc(sizeof(dnode));
p0->datas = num;
while(p0->data>p1->data && p1->next!= NULL){
p1 = p1->next;
}
if(p0->data<=p1->data){
if(head==p1){
p0->next = p1;
p1->next = p0;
head = p0;
}else{
p1->pre->next = p0;
p0->next = p1;
p0->pre = p1->pre;
p1->next = p0;
}
}else{//比哪个都大的情况
p1->next = p0;
p0->next = p1;
p0->next =NULL;
}
return head;
}