指針與數據結構算法_鏈表(C語言)


一.變量:

   聲明一個變量系統是沒有給這個變量分配內存空間的:

例:

int j;//編譯的時候是沒有分配內存空間的
int i=3;//計算機在編譯的時候就會給這個i分配4個字節的內存空間

二.malloc動態分配內存地址:

回想一下:我們在程序中存儲一個整數10;除了使用int a;在內存中申請一塊區域來存儲,還有一種方法:
              malloc(4);                    //從內存中申請4個字節大小的內存存放整數10
  在C中經常看到這樣的寫法:
        (int *)malloc(sizeof(int));  //sizeof(獲取int類型所占的字節數)
                                                //(int *)表示申請的這些字節數用於存放int類型的整數
例:
#include <stdio.h>
#include <stdlib.h>
 int main()
 {
     int b;
     b=(int)malloc(sizeof(int));  //沒有這句話,變量b 是不占內存的,printf輸出就會空指針異常;有這句話,就輸出的申               請的內存地址
     printf("%d",b);
     system("pause");
     return 0;
 }

三.C中的*和&:

       *:代表取內存中的值(*還有乘法運算,這個就不多解釋了)
       &: 代表獲取的是變量的地址
       **:二級指針(就是地址里面存放第三個變量的地址地址)
       ->:結構體指針運算符(用於訪問結構體內部成員的)
 
例(二級指針的例子):
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[]={1,2,3,4,5};//這個數組里存入的是具體的數據
    int *num[]={&a[0],&a[1],&a[2],&a[3],&a[4]};//這個數組里面就是全部存的數內存地址,並不是數據
    int **p,i;
    p=num;
    for (i = 0; i < 5; i++)//注意這里,C語言是不能在這里進行變量的定義的如:int i
    {
        printf("%d\t",**p);//這里的p表示num數組的首地址,*p表示num[1]的值,也就是a[0]的地址,**p就是值了
        p++;//指針向下移一格
    }
    system("parse");
    return 0;
}

 

四.鏈表(遍歷):
根據以上知識點,就可以進行簡單的鏈表的遍歷了
例:
#include <stdio.h>
#include <stdlib.h>
 struct note
 {
     int data;
     struct note *next;
 };
int main()
 {
     struct note *head,*p,*q,*t;//
     int i,n,a;
     scanf("%d",&n);//有多少個數
     head=NULL;//頭指針初始化為空
     for (i = 0; i < n; i++)//循環讀取n個數
     {
         scanf("%d",&a);
         p=(struct note *)malloc(sizeof(struct note));//動態申請一個節點的空間,存放節點
         p->data=a;//將數據存入data中
         p->next=NULL;//設置當前指針的后續指針指向空
         if(head==NULL)
         {
             head=p;//如果這是第一個創建的節點,就讓頭指針指向這個
         }
         else
         {
             q->next=p;//如果不是第一個節點,就讓前一個的后續指針指向當前節點
         }
         q=p;//在將q也指向當前節點
     }
     t=head;
     while (t!=NULL)
     {
         printf("%d\t",*t);
         t=t->next;   //繼續下一個節點
     }
     system("pause");
return 0; }

 

五.后記:
 
         以上只是對鏈表進行了遍歷,鏈表數據的添加刪除,后續繼續更新
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM