鍊錶的純C實現

2021-10-06 03:01:22 字數 3266 閱讀 3520

輸入

為線性表的操作系列,每個操作一行,具體見樣例。
輸出

如果輸入為"empty", 則根據表是否為空輸出"empty"或 "not empty"。

如果輸入為"length",則輸出表長。

如果輸入為"insert i e",插入失敗則輸出"insert failed",否則在i位置插入e後輸出插入後表中的所有元素。

如果輸入為"getelem i ",引數i錯誤輸出"out of index",否則輸出在i位置的元素。

如果輸入為"locateelem e",如果未發現輸出"e is not found in list",否則輸出e在表中的位置。

如果輸入為"delete i",如果失敗輸出"delete failed",否則刪除i位置的元素後輸出插入後表中的所有元素。

具體參見樣例。

樣例輸入

empty

insert 1

7empty

insert 2

3length

insert 1

-100

length

insert 10

100length

insert 2

10000

empty

getelem 2

getelem 5

locateelem 999

locateelem 3

delete 0

delete 4

delete 1

length

樣例輸出

empty

7not empty73

list length is 2

-10073

list length is 3

insert failed

list length is 3

-100

1000073

not empty

the elem at position 2 is 10000

out of index

999 is not found in list

3 is found at the position 4

delete failed

-100

10000

710000

7list length is 2

#include

#include

#include

#define ok 1

#define error 0

#define overflow -2

typedef

int status;

//status 是函式返回值型別,其值是函式結果狀態**。

typedef

int elemtype;

//elemtype 為可定義的資料型別,此設為int型別

#define maxsize 100

//鍊錶可能達到的最大長度

typedef

struct lnode

lnode,

* linklist;

//linklist為指向結構體lnode的指標型別

status initlist

(linklist *l)

//演算法2.6 單鏈表的初始化

status destroylist

(linklist *l)

return ok;

}int

listlength

(linklist l)

return length;

}int

listempty

(linklist l)

status getelem

(linklist l,

int i, elemtype *e)

//單鏈表的取值

*e = l->data;

return ok;

}//getelem

intlocateelem

(linklist l,

int e)

//按值查詢

return error;

}//locateelem

status listinsert

(linklist *l,

int i, elemtype e)

//單鏈表的插入if(

!p || j > i -1)

return error;

b =(linklist)

malloc

(sizeof

(lnode));

b->data = e;

b->next = p->next;

p->next = b;

return ok;

}//listinsert

status listdelete

(linklist *l,

int i)

//演算法2.9 單鏈表的刪除

else

cnt++;

}return error;*/

}//listdelete

void

listprint

(linklist l)

/* lnode* p;

for (p = l->next; p; p = p->next)

cout << p->data << (p->next ? ' ' : '\n');*/

}int

main()

// cout << (listempty(l) ? "empty" : "not empty") << endl;

elseif(

strcmp

(op,

"insert")==

0)elseif(

strcmp

(op,

"length")==

0)elseif(

strcmp

(op,

"getelem")==

0)elseif(

strcmp

(op,

"locateelem")==

0)elseif(

strcmp

(op,

"delete")==

0)}destroylist

(&l)

;return0;

}

資料結構 鍊錶(純c語言實現)

include include typedef struct nodelnode,linklist linklist greatlinklist int n return list 實現鍊錶的插入操作。1 前驅結點不用找,前驅結點是作為函式的引數的,用來搞清要插入的結點的位置。2 將前驅結點的指標域...

c 鍊錶的實現

author jacky ma date 23th,may,07 主要實現 1 鍊錶的建立,2 逆置 3 排序 4 有序鍊錶的歸併 5 兩鍊錶連線 6 迴圈鍊錶的判定 include include using namespace std 鍊錶節點結構 struct linknode 建立單鏈表 l...

鍊錶的C 實現

陣列中插入乙個元素或者刪除乙個元素時,必須移動陣列中的元素,從而使動態列表的順序儲存低效。鍊錶可以解決這一問題,它由資料和乙個指向下乙個節點的指標組成。基本的操作有構造 判空 插入 刪除和遍歷。程式如下 include using namespace std template class list ...