資料結構 順序表相關演算法

2022-05-25 04:27:07 字數 2981 閱讀 5313

1 #include 2 #include 3

4#define list_init_size 100

5#define listincrement 10

6#define overflow -2

7#define ok 1

8#define error 0

9 typedef int

elemtype;

10 typedef struct

sqlist;

1516

int initlist_sq(sqlist *l);

17int listinsert_sq(sqlist *l,int

i,elemtype e);

18void listinput_sq(sqlist *l);

19void listoutput_sq(sqlist *l);

20int listlength_sq(sqlist *l);

21int listdelete_sq(sqlist *l,int i,elemtype *e);

22int locateelem_sq(sqlist *l,elemtype e,int (*compare)(elemtype,elemtype));

23int

compare(elemtype a,elemtype b);

24void mergelist_sq(sqlist *la,sqlist *lb,sqlist *lc);

25void getelem(sqlist *l,elemtype i,elemtype *e);

26int emptylist(sqlist *l);

27void listinverse(sqlist *l);

2829

intmain()

30 else

7374

//輸出順序表某一位置的元素

75 getelem(&sq2,4,&e);

76 printf("

第i個元素為:%d\n

",e);

7778

//將順序表逆置

79 listinverse(&sq2);

80 listoutput_sq(&sq2);

81return0;

82}83//

初始化線性表

84int initlist_sq(sqlist *l)

91//

向線性表中輸入元素

92void listinput_sq(sqlist *l)

102103

return

;104 }//

從線性表輸出元素

105void listoutput_sq(sqlist *l) else

114}

115 printf("\n"

);116

return

;117

}118

//返回線性表中元素的個數

119int listlength_sq(sqlist *l)

122//

向線性表中插入元素

123int listinsert_sq(sqlist *l,int

i,elemtype e)

134/*

q = &(l->elem[i-1]);

135for(p=&(l->elem[l->length-1]);p>=q;--p)

138*q = e;

*/139

for(m=l->length-1; m>=i-1; --m)

142 l->elem[i-1] =e;

143 ++l->length;

144return

ok;145

}146

//刪除線性表中的元素

147int listdelete_sq(sqlist *l,int i,elemtype *e)

155156

/*p = &(l->elem[i-1]);

157*e = *p;

158q = l->elem+l->length-1;

159for(++p; p<=q; ++p)

*/162 --l->length;

163return

ok;164

}165

//166

int locateelem_sq(sqlist *l,elemtype e,int (*compare)(elemtype,elemtype))

172if(i<=l->length) return

i;173

else

return0;

174}

175int

compare(elemtype a,elemtype b) else

181}

182//

歸併排序將兩個順序表合併(這兩個順序表都是有序的)

183void mergelist_sq(sqlist *la,sqlist *lb,sqlist *lc)

193while(ilength) lc->elem[k++] = la->elem[i++];

194while(jlength) lc->elem[k++] = lb->elem[j++];

195return

;196

}197

//返回順序表中第i個元素的值

198void getelem(sqlist *l,elemtype i,elemtype *e)

201//

判斷順序表是否非空,是空的,返回true;否則,返回false。

202int emptylist(sqlist *l) else

208}

209//

順序表逆置

210void listinverse(sqlist *l)

217return

;218 }

資料結構 順序表相關操作

project sequence list 資料結構 順序表 creatlist sqlist l,int n 引數 順序表l,順序表長度n 功能 建立長度為的順序表 時間複雜度 o n initlist sqlist l 引數 順序表l 功能 初始化 時間複雜度 o 1 insertlist sq...

《大話資料結構》 3 1順序表相關操作

最近開始學習 大話資料結構 這本書,準備把裡面的範例用c 敲一敲,以備後續複習,目前還是很菜很菜,盡量把子函式寫清楚,主函式可能就考慮的不是那麼周到了。include using namespace std include include class mylist bool isempty 判斷線性...

資料結構 線性表相關

1.佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 2.棧 stack 在電腦科學中是限定僅在棧頂進行插入或刪除操作的線性表。3.鍊錶 linked list 是一種常見的基礎資料結構,是一種線性表,是一種物理儲存單元上非連續 非順序的儲存結構。雙向鍊錶也叫雙鏈表 是...