/************************************************************************* > File Name: double_link.c > Author: heathcliff > Mail: --------------------------- > Created Time: 2016年03月30日 星期三 11時15分05秒 ************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct DulNode { char name[20]; struct DulNode *prior,*next; }stud; stud *create(int n); void print(stud *head); void search(stud *head,int n); stud *delete(stud *head,int n); stud *insert(stud *head,int n); int main(void) { stud * head; int n = 3; head = create(n); print(head); // search(head,n); // head = delete(head,n); // print(head); head = insert(head,n); return 0; } stud *create(int n) { stud *p,*head,*s; int i; head = (stud *) malloc (sizeof(stud)); head->name[0] = '\0'; head->next = NULL; p = head; for(i = 0;i<n;i++){ s = (stud *) malloc (sizeof(stud)); printf("please input student's name:"); scanf("%s",p->name); /*將p和s鏈接起來*/ p->next = s; //指定後繼節點 s->prior = p;//指定前驅節點 p = p->next;//p 向後移動一格 //p = s;//這個也是能夠的 } p->next = NULL; head->prior = NULL; return head; } void print(stud *head) { stud *p; p = head; while(p != NULL){ printf("\n------------print--------\n"); printf("%4s\n",p->name); p = p->next; } } void search(stud *head,int n) { int ser,i = 0; stud *p; p = head; printf("\n請輸入要尋找第幾個(從0開始):"); scanf("%d",&ser); while(i != ser && i <= n){//此處不能寫爲i<n, //不然最後一個元素將沒法查找到 i++; p = p->next; } if(i==n) printf("沒找到\n"); else{ printf("已經找到,你要的信息是:\n"); printf("%s\n",p->name); } } stud *delete(stud *head,int n) { stud *p,*s; int del, i = 0; p = head; printf("請輸入你要刪除的信息的序號:"); scanf("%d",&del); while(i != del && i <= n){//此處不能寫爲i<n, //不然最後一個元素將沒法查找到 s = p; i++; p = p->next; } if(i==n) printf("沒找到\n"); else{ printf("已經找到,你要刪除的信息是:\n"); printf("%s\n",p->name); /*開始刪除*/ if(i == 0){ //說明刪除的是頭節點 head = p->next; head->prior = NULL; } else{ s->next = p->next; s->prior = p->prior; } printf("刪除成功\n"); free(p); n--; } return head; } stud *insert(stud *head,int n) { stud *p,*s; p = head; int ser,i = 0; char ins[20]; char p_temp[20]; printf("\n請輸入你要插入的信息:"); scanf("%s",ins); s = (stud *) malloc (sizeof(stud)); strcpy(s->name,ins); printf("\n請輸入要插入***的後面:"); scanf("%d",&ser); while(i != ser){//此處不能寫爲i<n, //不然最後一個元素將沒法查找到 i++; p = p->next; } if(i==n) printf("沒找到\n"); else{ printf("已經找到,你要的信息是:\n"); printf("%s\n",p->name); printf("----------\n"); } s->next = p->next; //printf("p->next->name = %s\n",p->next->name); //printf("s->next->name = %s\n",s->next->name); p->next->prior = s; //printf("p->next->prior->name = %s\n",p->next->prior->name); s->prior = p; //負責鏈接 //printf("p->prior->name = %s\n",p->prior->name); p->next = s;//負責鏈接 //printf("p->next->name = %s\n",p->next->name); //printf("\np->next->prior->name = %s\n",p->next->prior->name); //printf("p->prior->next->name = %s\n",p->prior->next->name); //printf("p->next->name = %s\n",p->next->name); //printf("p->prior->name = %s\n",p->prior->name); p = head; while(p != NULL){ printf("\n------------print--------\n"); printf("%4s\n",p->name); p = p->next; } free(p); return head; }
在插入這裏我想理順一下,在各大博客、論壇上,全部的插入都長一個樣,索性本身畫了一個長得不同的(電腦畫太麻煩了,手繪,不喜勿噴哈)
1.s->next = p->next;
2.p->next->prior = s;
3.s->prior = p;
4.p->next = s; spa