双链表

pre 代表前驱指针,它永远指向当前结点的前一个结点,注意,如果当前结点是头结点,则pre指针为空;
next 代表后继指针,它永远指向当前结点的下一个结点,注意,如果当前结点是尾结点,则next指针为空;
代码设计可以为:

typedef struct line{
       int data;
       struct line *pre;
       struct line *next;
}line , *a;

双链表的创建,需要先创建头结点再逐步的进行添加,请注意,头结点是有元素的,与一般的单链表不同。
对于逐步添加数据,采取的做法是,开辟一段新的内存空间作为新的结点,为这个结点进行的data进行赋值,然后将已成链表的上一个结点的next指针指向自身,自身的pre指针指向上一个结点。

//创建双链表
line* initLine(line * head){
     int number,pos=1,input_data;
     //三个变量分别代表结点数量,当前位置,输入的数据
      printf("请输入创建结点的大小\n");    
     scanf(“%d”,&number); 
     if(number<1){return NULL;}//输入非法直接结束
     ////头结点创建/////
     head = (line*)malloc(sizeof(line));
     head ->pre = NULL;
     head ->next = NULL;
     printf("输入第%d个数据\n",pos++);
     scanf("%d",&input_data);
     head -> data = input_data;
     
     line * list = head;
     while (pos<= number){
        line * body = (line*)malloc(sizeof(line));
        body ->pre = NULL;
        body ->next = NULL;
        printf("输入第%d个数据\n",pos++);
        scanf("%d" , &input_data;
        body ->data = input_data;
        list = list ->next;
        }
       return head;
} 
posted @ 2024-06-11 21:59  just-rember  阅读(35)  评论(0)    收藏  举报