1 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
初始化就是建立一個(gè)空線性表,那直接把長度置為0就行了。
1 /* 初始化順序線性表 */
2 Status InitList(SqList *L)
3 {
4 L->length=0;
5 return OK;
6 }
因?yàn)橐跏蓟獙€性表本身進(jìn)行操作,所以不能用值傳遞。值傳遞不會(huì)改變實(shí)參的值嘛。地址傳遞的話呢,實(shí)際上在函數(shù)內(nèi)部執(zhí)行了這么一個(gè)操作:L = &L. 所以操作函數(shù)內(nèi)部的L,也就相當(dāng)于操作外部的線性表L。其實(shí)地址傳遞也是值傳遞。不過這個(gè)值是地址而已。
就是說,需要修改表的就傳指針,不需要修改表的傳值就行了。那補(bǔ)上一個(gè)完整的可運(yùn)行的程序。
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 /* 存儲(chǔ)空間初始分配量 */
09 typedef int ElemType; /* ElemType類型根據(jù)實(shí)際情況而定,這里假設(shè)為int */
10 typedef int Status; /* Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OK等 */
11
12 typedef struct
13 {
14 ElemType data[MAXSIZE]; /* 數(shù)組,存儲(chǔ)數(shù)據(jù)元素 */
15 int length; /* 線性表當(dāng)前長度 */
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 }
程序運(yùn)行結(jié)果:
1 初始化L后:L.length=0
2
3 Process returned 22 (0x16) execution time : 0.072 s
4 Press any key to continue.
有個(gè)問題,在函數(shù)內(nèi)部 L->length=0; 使用箭頭,而在外面調(diào)用的時(shí)候 L.length 卻用實(shí)心點(diǎn),兩者有啥區(qū)別嗎?
這個(gè)很基礎(chǔ)嘛。。。在函數(shù)內(nèi)部,傳遞的參數(shù)是 *L,那么L就是指針。指針需要用->指向成員。而在外部的L是實(shí)體對象,實(shí)體對象則用實(shí)心點(diǎn)來指向成員嘛。
OK,線性表的初始化就這么簡單。
- 1 回答
- 0 關(guān)注
- 1169 瀏覽
添加回答
舉報(bào)