啊哈,算法學習筆記(2)

鏈表 插入數字

#include <stdlib.h>    malloc頭函數
struct node             定義結構體來存儲節點,每個節點由兩部分組成
{
    int data;
    struct node *next;
};

    for(i=1;i<=n;i++)
    {
        scanf("%d",&a);
        //動態申請空間來存放一個節點,並用臨時指針p指向這個節點
        p=(struct node *)malloc(sizeof(struct node));
        p->data=a;  //將數據存在當前節點的data域中
        p->next=NULL;//設置當前節點的後續指針爲空,即當前節點的下一個節點爲空
        if(head==NULL)
            head=p;  //如果這是第一個創建的節點
        else
            q->next=p; //如果不是第一個創建的節點,則上一個節點的後繼指針指向當前節點
        q=p; //指針q也指向當前節點
    }
    scanf("%d",&a); //輸入要插入的數
    t=head;
    //輸出鏈表中所有數
    while(t!=NULL)
    {
       if(t->next==NULL || t->next->data>a) //插入新增節點
       {
            p=(struct node *)malloc(sizeof(struct node));
            p->data=a;
            p->next=t->next;  //新增節點的後繼節點指向當前節點的後繼節點      注意這兩行
            t->next=p;  //當前節點的後繼節點指向新增節點
            break;
       }
     
 t=t->next;  //繼續下一個節點   第一次沒有寫這一句,程序運行後跳不出。
    }
第一次沒有釋放空間free()

malloc後要記住釋放空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章