線性表順序儲存方式的C語言實現

2022-09-11 19:03:15 字數 4624 閱讀 4331

1/*2

編譯器vc6++

3檔名1.cpp

4**版本號:1.056

*/7 #include 8 #include 9

10#define ok 1

11#define error 0

12#define true 1

13#define false 0

14#define overflow -2

15#define list_init_size 10

16#define list_increment 10

1718 typedef int

elemtype;

19 typedef int

status;

20 typedef struct

sqlist;

2526 status initsqlist(sqlist *l)//

初始化線性表,分配容量

2736

37 status assignsqlist(sqlist *l) //

按位序assign值到線性表中

3847

else

48return

error;49}

5051 status listinsert(sqlist *l, int i, elemtype e) //

元素插入

5261

if ((*l).length >= (*l).listsize)

6271

for (q = (*l).base + (*l).length - 1; q >= (*l).base + i-1;q--)

72 *(q + 1) = *q;

7374 *((*l).base + i - 1) =e;

75 (*l).length++;

76return

ok;77}78

79 status getelem(sqlist *l,int i,elemtype *e)

8086

else

8791}92

93 status mergelist(sqlist *lc,sqlist la,sqlist lb)

94114

else

115119

}120

121while(i<=la.length)

122126

while(j<=lb.length)

127131

132return

ok;133

}134

135 status listdelete(sqlist *l,int i,elemtype *e)

136146

147 status priorelem(sqlist *l,elemtype e,elemtype *prior_elem)

148154

if(i==(l->length+1

))155

159else

160166

else

167171

}172

}173

174 status nextelem(sqlist *l,elemtype e,elemtype *next_elem)

175181

if(i==(l->length+1

))182

186else

187193

else

194198

}199

}200

/*201

返回l中第1個與e滿足關係compare()的資料元素的位序。

202若這樣的資料元素不存在,則返回值為0。

203*/

204int locateelem(sqlist *l,elemtype e,bool (*compare)(elemtype e,elemtype a))

205

214215

bool

comp(elemtype e,elemtype a)

221222 status printlinklist(sqlist l) //

遍歷輸出線性表中的元素

223228

229return

ok;230

}231

232 status destroylist(sqlist *l)

242return

error;

243}

244245 status clearlist(sqlist *l)//

將線性表重置為長度為0的空表

246250

251bool isempty(sqlist *l) //

判斷線性表是否是空表

252258

259void

main()

260;

278int b[10]=;

279280

for(i=0;i<5;i++)

281 listinsert(&la,la.length+1

,a[i]);

282283

for(i=0;i<10;i++)

284 listinsert(&lb,lb.length+1

,b[i]);

285286

printlinklist(la);

287 printf("

\n***************===\n");

288printlinklist(lb);

289 printf("

\n***************===\n");

290291 s=mergelist(&lc,la,lb);

292printlinklist(lc);

293 printf("

\n***************===\n");

294295

//合併3個線性表結束

296297

if(s)

298 s=assignsqlist(&l);

299300

printlinklist(l);

301 printf("

\n***************===\n");

302 printf("

請輸入要獲得的元素的位序: ");

303 scanf("

%d",&i);

304 s=getelem(&l,i,&e);

305 printf("

\n線性表中位序為%d的元素為%d

",i,e);

306 printf("

\n***************===\n");

307 printf("

",locateelem(&l,6

,comp));

308/*

printf("請輸入您要插入的元素: ");

309scanf("%d", &theelem);

310printf("請輸入您要插入元素的位置: ");

311scanf("%d", &i);

312listinsert(&l, i, theelem);

*/313 printf("

\n***************===\n");

314 printf("

\n您刪除第乙個元素後的線性表為\n");

315 listdelete(&l,1,&e);

316printlinklist(l);

317 printf("

\n您刪除的這個元素為%d

",e);

318 printf("

\n***************===\n");

319//

前驅開始

320 priorelem(&l,1,&prior_elem);

321 printf("

\n***************===\n");

322 printf("

元素1的前驅為%d

",prior_elem);

323 printf("

\n***************===\n");

324//

前驅結束

325//

後繼開始

326 nextelem(&l,9,&next_elem);

327 printf("

\n***************===\n");

328 printf("

元素9的後繼為%d

",next_elem);

329 printf("

\n***************===\n");

330//

後繼結束

331if

(s)332

335336

printlinklist(l);

337 system("

pause");

338 }

線性表 順序儲存C語言實現

定義 線性表是包含有限相同型別元素,除首元素外,其他元素只有乙個唯一前驅元素,除尾元素外,其他元素只有乙個後繼元素的線性結構表。均有2種儲存方式 順序儲存 鏈式儲存 資料結構定義 typedef struct tabletable 基本操作 table inittable t.length 0 re...

線性表 順序儲存結構 C語言實現

參考 大話資料結構 程杰 部落格 豆瓣 主要包括 列表定義 判斷列表是否為空 初始化列表 列印列表 清空列表 得到第i個位置元素 元素定位 列表第i個元素插入 列表第i個元素刪除 計算列表長度 include include define ok 1 define error 0 define tru...

線性表的順序儲存結構(C語言實現)

最近在研究資料結構,看了好多資料結構方面的書,但好多書都是用的偽 實現,對初學者或者語言功底不深厚的同學來說很不友好,也有好多書說是用c語言實現,但應用了c 的東西,比如c 中的引用,導致 晦澀難懂。學資料結構不能只是看書,一定要將各種結構用 實現,我也將各個部分實現的 貼出來。首先是線性表的順序儲...