1 回答

TA貢獻1880條經驗 獲得超4個贊
初始化就是建立一個空線性表,那直接把長度置為0就行了。
1 /* 初始化順序線性表 */
2 Status InitList(SqList *L)
3 {
4 L->length=0;
5 return OK;
6 }
因為要初始化,要對線性表本身進行操作,所以不能用值傳遞。值傳遞不會改變實參的值嘛。地址傳遞的話呢,實際上在函數內部執行了這么一個操作:L = &L. 所以操作函數內部的L,也就相當于操作外部的線性表L。其實地址傳遞也是值傳遞。不過這個值是地址而已。
就是說,需要修改表的就傳指針,不需要修改表的傳值就行了。那補上一個完整的可運行的程序。
01 #include "stdio.h"
02
03 #define OK 1
04 #define ERROR 0
05 #define TRUE 1
06 #define FALSE 0
07
08 #define MAXSIZE 20 /* 存儲空間初始分配量 */
09 typedef int ElemType; /* ElemType類型根據實際情況而定,這里假設為int */
10 typedef int Status; /* Status是函數的類型,其值是函數結果狀態代碼,如OK等 */
11
12 typedef struct
13 {
14 ElemType data[MAXSIZE]; /* 數組,存儲數據元素 */
15 int length; /* 線性表當前長度 */
16 }SqList;
17
18 /* 初始化順序線性表 */
19 Status InitList(SqList *L)
20 {
21 L->length=0;
22 return OK;
23 }
24
25 int main()
26 {
27 SqList L;
28 ElemType e;
29 Status i;
30
31 i=InitList(&L);
32 printf("初始化L后:L.length=%d\n",L.length);
33 }
程序運行結果:
1 初始化L后:L.length=0
2
3 Process returned 22 (0x16) execution time : 0.072 s
4 Press any key to continue.
有個問題,在函數內部 L->length=0; 使用箭頭,而在外面調用的時候 L.length 卻用實心點,兩者有啥區別嗎?
這個很基礎嘛。。。在函數內部,傳遞的參數是 *L,那么L就是指針。指針需要用->指向成員。而在外部的L是實體對象,實體對象則用實心點來指向成員嘛。
OK,線性表的初始化就這么簡單。
- 1 回答
- 0 關注
- 1160 瀏覽
添加回答
舉報