typedef struct _NODE

  1 #include"LINK_DLIST.h"
  2 #include<stdlib.h>
  3 #include<stdio.h>
  4 bool init_link_dlist(NODE *phead)
  5 {
  6     if(phead == NULL)
  7     {
  8         return false;
  9     }
 10     phead->data = -1;
 11     phead->next = NULL;
 12     phead->prio = NULL;
 13     return true;
 14 }
 15 
 16 NODE *alloc(int e)
 17 {
 18     NODE *tmp = (NODE *)malloc(sizeof(NODE)*1);
 19     if(tmp == NULL)
 20     {
 21         return NULL;
 22     }
 23     tmp->data = e;
 24     tmp->next = NULL;
 25     tmp->prio = NULL;
 26     return tmp;
 27 }
 28 
 29 bool insert_head(NODE *phead,int e)
 30 {
 31     if(phead == NULL)
 32     {
 33         return false;
 34     }
 35      NODE *tmp = alloc(e);
 36     if(is_empty(phead))
 37     {
 38           
 39         phead->next = tmp;
 40         tmp->prio = phead;
 41         return true;
 42 
 43     }
 44     
 45     tmp->next = phead->next;
 46     phead->next->prio = tmp;
 47     tmp->prio = phead;
 48     phead->next = tmp;
 49     return true;
 50 }
 51 
 52 bool show(NODE *phead)
 53 {
 54     if(phead == NULL)
 55     {
 56         return false;
 57     }
 58     NODE * p= phead->next ;
 59     while(p!= NULL)
 60     {
 61         printf("%d ",p->data);
 62         p = p->next ;
 63 
 64     }
 65     printf("\n");
 66     return true;
 67 }
 68 
 69 bool is_empty(NODE *phead)
 70 {
 71     if(phead == NULL)
 72     {
 73         return false;
 74     }
 75     return phead->next == NULL;
 76 }
 77 
 78 NODE *get_last(NODE *phead)
 79 {
 80     if(phead == NULL)
 81     {
 82         return NULL;
 83     }
 84     if(is_empty(phead))
 85     {
 86         return phead;
 87     }
 88     NODE *p = phead;
 89     while(p->next != NULL)
 90     {
 91         p = p->next ;
 92     }
 93     return p;
 94 }
 95 bool insert_tail(NODE *phead,int e)
 96 {
 97     if(phead == NULL)
 98     {
 99         return false;
100     }
101     NODE *tmp = alloc(e);
102     NODE *p   = get_last(phead);
103     p->next = tmp;
104     tmp->prio = p;
105 
106     return true;
107 }
108 
109 bool delete_head(NODE *phead,int *e)
110 {
111     if(phead == NULL)
112     {
113         return false;
114     }
115     NODE *tmp = alloc(*e); 
116     if(phead->next->next == NULL)
117     {
118         free(phead->next);
119         phead->next = NULL;
120         return true;
121     }
122     tmp = phead->next ;
123     *e = tmp->data ;
124     phead->next = tmp->next ;
125     tmp->next->prio  = phead;
126 
127     return true;
128 
129 }
130 bool delete_tail(NODE *phead,int *e)
131 {
132     if(phead == NULL)
133     {
134         return false;
135     }
136     NODE *tmp = alloc(*e);
137     tmp = get_last(phead);
138     *e = tmp->data ;
139     tmp->prio->next = NULL;
140     free(tmp);
141     return true;
142 
143 }
144 NODE *get_addr_by_pos(NODE *phead, int pos)
145 {
146     if(phead == NULL)
147     {
148         return NULL;
149     }
150     if(pos<=0 && pos > get_len(phead))
151     {
152         return NULL;
153     }
154     NODE *p = phead ;
155     while(pos>0)
156     {
157         p=p->next ;
158         pos--;
159 
160     }
161     return p;
162 }
163 bool insert(NODE*phead,int pos,int e)
164 {
165     if(phead == NULL)
166     {
167         return false;
168     }
169     if(pos<0 && pos>get_len(phead))
170     {
171         return false;
172     }
173     NODE *tmp = alloc(e);
174     NODE *s = get_addr_by_pos(phead,pos);
175     s->prio ->next = tmp;
176     tmp->next = s;
177     tmp->prio = s->prio ;
178     s->prio = tmp;
179     return true;
180 
181 }
182 bool del(NODE *phead,int pos)
183 {
184     if(phead == NULL)
185     {
186         return false;
187     }
188     if(pos<0 && pos >get_len(phead))
189     {
190         return false;
191     }
192     
193     NODE *s = get_addr_by_pos(phead,pos);
194     s->prio->next = s->next ;
195     s->next ->prio = s->prio ;
196     free(s);
197     return true;
198 
199 }
200 int get_len(NODE *phead)
201 {
202     NODE *p = phead->next;
203     int count= 0;
204     while(p!=NULL)
205     {
206         p = p->next ;
207         count ++;
208     }
209     return count;
210 }

 


{
int data;
struct _NODE *next;
struct _NODE *prio;

}NODE;

bool init_link_dlist(NODE *phead);
bool insert_head(NODE *phead,int e);
bool show(NODE *phead);
bool is_empty(NODE *phead);
NODE *get_last(NODE *phead);
bool insert_tail(NODE *phead,int e);
bool delete_head(NODE *phead,int *e);
bool delete_tail(NODE *phead,int *e);

bool insert(NODE*phead,int pos,int e);
bool del(NODE *phead,int pos);
int get_len(NODE *phead);

 

方法的具体实现