連結串列中的一級指標與二級指標
在用c/c++寫資料結構程式時,連結串列和二叉樹中經常需要用到二級指標或者一級指標的引用,那麼什麼時候用什麼時候不用呢?
先看一個簡單的c++連結串列操作程式:
(雖然風格有點像c,不過這個是cpp檔案,不要在意這些細節)
- /*
- code:Linklist
- author:tashaxing
- time:2014.9.30
- */
- #include "stdio.h"
- #include "stdlib.h"
- #include "time.h"
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- #define MAXSIZE 20 /* 儲存空間初始分配量 */
- typedefint Status;/* Status是函式的型別,其值是函式結果狀態程式碼,如OK等 */
- typedefint ElemType;/* ElemType型別根據實際情況而定,這裡假設為int */
- Status visit(ElemType c)
- {
- printf("%d ",c);
- return OK;
- }
- typedefstruct Node
- {
- ElemType data;
- struct Node *next;
- }Node;
- typedefstruct Node *LinkList; /* 定義LinkList */
- //初始化表頭,用一級指標(此方式無效)
- Status InitList1(LinkList L) //等價於Node *L
- {
- L=(LinkList)malloc(sizeof(Node)); /* 產生頭結點,並使L指向此頭結點 */
- if(!L) /* 儲存分配失敗 */
- return ERROR;
- L->next=NULL; /* 指標域為空 */
- return OK;
- }
- //初始化表頭,用二級指標
- Status InitList2(LinkList *L) //等價於Node **L
- {
- *L=(LinkList)malloc(sizeof(Node)); /* 產生頭結點,並使L指向此頭結點 */
- if(!(*L)) /* 儲存分配失敗 */
- return ERROR;
- (*L)->next=NULL; /* 指標域為空 */
- return OK;
- }
- //初始化表頭,用一級指標引用
- Status InitList3(LinkList &L) //等價於Node *&L
- {
- L=(LinkList)malloc(sizeof(Node)); /* 產生頭結點,並使L指向此頭結點 */
- if(!L) /* 儲存分配失敗 */
- return ERROR;
- L->next=NULL; /* 指標域為空 */
- return OK;
- }
- //清空連結串列,使用二級指標
- Status ClearList1(LinkList *L)
- {
- LinkList p,q;
- p=(*L)->next; /* p指向第一個結點 */
- while(p) /* 沒到表尾 */
- {
- q=p->next;
- free(p);
- p=q;
- }
- (*L)->next=NULL; /* 頭結點指標域為空 */
- return OK;
- }
- //清空連結串列,使用一級指標
- Status ClearList2(LinkList L)
- {
- LinkList p,q;
- p=L->next; /* p指向第一個結點 */
- while(p) /* 沒到表尾 */
- {
- q=p->next;
- free(p);
- p=q;
- }
- L->next=NULL; /* 頭結點指標域為空 */
- return OK;
- }
- //銷燬連結串列,使用一級指標(此方式無效)
- Status DestroyList1(LinkList L)
- {
- LinkList p,q;
- p=L->next; /* p指向第一個結點 */
- while(p) /* 沒到表尾 */
- {
- q=p->next;
- free(p);
- p=q;
- }
- free(L);
- L=NULL;
- return OK;
- }
- //銷燬連結串列,使用二級指標
- Status DestroyList2(LinkList *L)
- {
- LinkList p,q;
- p=(*L)->next; /* p指向第一個結點 */
- while(p) /* 沒到表尾 */
- {
- q=p->next;
- free(p);
- p=q;
- }
- free(*L);
- *L=NULL;
- return OK;
- }
- //銷燬連結串列,使用一級指標引用
- Status DestroyList3(LinkList &L)
- {
- LinkList p,q;
- p=L->next; /* p指向第一個結點 */
- while(p) /* 沒到表尾 */
- {
- q=p->next;
- free(p);
- p=q;
- }
- free(L);
- L=NULL;
- return OK;
- }
- /* 初始條件:順序線性表L已存在,1≤i≤ListLength(L) */
- /* 操作結果:用e返回L中第i個數據元素的值 */
- Status GetElem(LinkList L,int i,ElemType *e)
- {
- int j;
- LinkList p; /* 宣告一結點p */
- p = L->next; /* 讓p指向連結串列L的第一個結點 */
- j = 1; /* j為計數器 */
- while (p && j<i) /* p不為空或者計數器j還沒有等於i時,迴圈繼續 */
- {
- p = p->next; /* 讓p指向下一個結點 */
- ++j;
- }
- if ( !p || j>i )
- return ERROR; /* 第i個元素不存在 */
- *e = p->data; /* 取第i個元素的資料 */
- return OK;
- }
- //在中間插入元素,用二級指標
- Status ListInsert1(LinkList *L,int i,ElemType e)
- {
- int j;
- LinkList p,s;
- p = *L;
- j = 1;
- while (p && j < i) /* 尋找第i個結點 */
- {
- p = p->next;
-
相關推薦
連結串列中的一級指標與二級指標
在用c/c++寫資料結構程式時,連結串列和二叉樹中經常需要用到二級指標或者一級指標的引用,那麼什麼時候用什麼時候不用呢?先看一個簡單的c++連結串列操作程式:(雖然風格有點像c,不過這個是cpp檔案,不要在意這些細節)/* code:Linklist author:tasha
C語言之一級指標與二級指標剖析
什麼是指標? 在電腦科學中,指標(Pointer)是程式語言中的一個物件,利用地址, 它的值直接指向(points to)存在電腦儲存器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為“指標”。意思是
指標與二級指標筆記(C語言)
一級指標 存放地址的變數稱為指標變數,指標變數是一種特殊的變數。 一般變數存放的是資料本身,指標變數存放的是資料的地址。 int a = 1 ; //普通變數 int *p = NULL ; //一個指向空的int型別的指標變數 p = &a;
連結串列中LinkList L與LinkList *L的區別
typedef struct Node{ int elem; struct node * next; }node,*LinkList; 對於LinkList L: L是指向定義的node結構體的指標,可以用->運算子來訪問結構體成員,即L->ele
徹底理解指標與二級指標
1.啥 ! int 可以強轉為 int* ! 都是二進位制有啥不能轉? 編譯器才不管呢,你說這
徹底理解連結串列中為何使用二級指標或者一級指標的引用
轉載:https://blog.csdn.net/u012234115/article/details/39717215在用c/c++寫資料結構程式時,連結串列和二叉樹中經常需要用到二級指標或者一級指標的引用,那麼什麼時候用什麼時候不用呢?先看一個簡單的c++連結串列操作程式
c語言的一級指標和二級指標作為函式引數,連結串列,malloc中的分配等等總結
主要內容: 1、一級指標和二級指標 2、函式指標傳遞的例子 3、什麼時候需要傳遞二級指標? 4、二級指標在連結串列中的使用 1、一級指標和二級指標 一級指標:即我們一般說的指標,就是記憶體地址; 二級指標:指向指標的指標,就是地址的地址; 如: int a=
C++ 單鏈表基本操作分析與實現 連結串列 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結
連結串列 連結串列是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過連結串列中的指標連結次序實現的。連結串列由一系列結點(連結串列中每一個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點地址的指標域。 相比於線性表
C語言:結構體中一級指標和二級指標的建立與釋放示例
這幾天把C語言鞏固了一下,作為一門最基本的程式語言,C語言還是相當基礎和非常重要的,個人認為C語言還是很有必要學好吃透的。 今天寫的話題是結構體結構體中一級指標和二級指標的建立與釋放,以一個例子來說明,筆者這裡自己敲得程式碼,雖然用C語言幾年了,但是有的東西還是會遺忘。筆者
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5
題目描述 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 /* 思路:由於是排序連結串列,只需判斷
快慢指標在連結串列中的一些證明
目錄 一、一定會相遇的證明 二、環長度 三、連線點 四、帶環連結串列總長度 五、例題 一、一定會相遇的證明 1、如果連結串列沒有環,那麼快指標比慢指標先到達尾部(null)。 2、如果連結串列有環的話,因為快指標走的比慢指標快,所以在環中相遇的過程可以看作是快
結構體和連結串列中陣列和指標不同表達形式
int getMaxLengthOfItems(MEC_MENU *menu,int count){ int i; int maxLen = strlen(menu[0].item); for(i = 0; i < c
連結串列中的指標
中期答辯改在了國慶之後,終於有時間可以看看劍指offer了。在看到單向連結串列的部分,對指標,尤其是頭指標有點疑惑。首先容易理解的是連結串列的節點是一個結構體,該結構體包含一個數據(一般是int型),還包含一個指向該結構體型別的指標。通過指標的指向一個個遍歷,也是通過指標一次
連結串列中的 指標,地址——資料結構(Summary)
資料結構中跳過集合,直接開始線性結構 線性結構中單鏈表的操作涉及到給一個變數賦值地址,所以涉及到了指標 通過指標裡的地址很方便找到節點 但指標這裡繞了我很長時間,不論學了多少遍也不敢說把指標學會了 地
一級指標、二級指標與字串
c語言中沒有字串型別,通過字元陣列來模擬字串,字串以‘\0’結束。 一、一級指標: 字元陣列的定義: 1.指定長度:char buf[100]={‘a’,‘b’}; 或char buf[100]=“ab”; 如果初始化的字元個數大於陣列長度,將會出現編譯錯
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solutio
11. 微軟面試題:輸入一個單向連結串列,輸出該連結串列中倒數第k個結點。連結串列的倒數第0個結點為連結串列的尾指標
題目:輸入一個單向連結串列,輸出該連結串列中倒數第k個結點。連結串列的倒數第0個結點為連結串列的尾指標。 分析: 單鏈表只能向後遍歷,不能向前遍歷,尾指標好找,倒數第K個不能從尾指標向前找。 倒的不好找,正的好找,我們只需要知道連結串列的總長度,就可以知道正數第幾個節點(
使用雙重指標實現連結串列結點的插入與刪除
單鏈表結點的插入和刪除是資料結構中很基本的操作。如果單鏈錶帶有頭結點,那麼可以把頭結點指標傳遞給插入和刪除函式;可如果對無頭結點的單鏈表進行上述操作,僅傳遞頭指標(指向第一個結點的指標),在插入或刪除操作改變連結串列頭指標時,將會有些問題。 下面我們通過一個例
劍指offer——在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點, # 重複的結點不保留,返回連結串列頭指標。
# 在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點, # 重複的結點不保留,返回連結串列頭指標。 例如,連結串列1->2->3->3->4->4->5 處理後為 1->2->5 # -*- coding:u
關於連結串列中頭指標和頭結點的理解
線性表使用順序(陣列)儲存時有個弊端,那就是在插入和刪除時需要大量的移動資料,這顯示是非常消耗時間的,所以可以採用鏈式儲存,即有一個指標域(單鏈表),來記錄下個結點的儲存位置(地址),這樣在插入和刪除結點時只需要修改指標域即可,從而大量減少移動資料所消耗的時間。來看連結串列