C - linklist 用法 - 佇列、堆疊

其他應用 

先進先出(佇列Queue)範例


struct Q_DATA { // 要丟進 queue 的資料內容
char *name;
int val;
};
void data_add(QUEUE *q, char *name, int val) {
struct Q_DATA *_qData;
if((_qData = calloc(1, sizeof(struct Q_DATA)))) {
_qData->name = strdup(name);
_qData->count = val;
q_add(q, _qData);
}
}
int main(int argc, char **argv) {
struct Q_DATA *_qData;
QUEUE *q = q_init(); // 初始化 queue

data_add(q, "aaa", 50); // 增加
data_add(q, "bbb", 50); // 增加

// 抓取資料並移除
while((_qData = q_delete(q))) {
free(_qData->name);
free(_qData);
}

q_free(q); // 最後再釋放 queue
}



先進後出(堆疊Stack)範例


struct S_DATA { // 要丟進 stack 的資料內容
char *name;
int val;
};
void data_add(STACK *s, char *name, int val) {
struct S_DATA *_sData;
if((_sData = calloc(1, sizeof(struct S_DATA)))) {
_sData->name = strdup(name);
_sData->count = val;
s_add(s, _sData);
}
}
int main(int argc, char **argv) {
struct S_DATA *_sData;
STACK *s = s_init(); // 初始化 stack

data_add(s, "aaa", 50); // 增加或修改值
data_add(s, "bbb", 50); // 增加或修改值

// 抓取資料並移除
while((_sData = s_pop(s))) {
free(_sData->name);
free(_sData);
}

s_free(s); // 最後再釋放 stack
}

 

雙端佇列(Deque)範例


struct DQ_DATA { // 要丟進 deque 的資料內容
char *name;
int val;
};
void data_push(DEQUE *dq, char *name, int val) { // 資料輸入到最前面
struct DQ_DATA *_dqData;
if((_dqData = calloc(1, sizeof(struct DQ_DATA)))) {
_dqData->name = strdup(name);
_dqData->count = val;
dq_push(dq, _dqData);
}
}
void data_append(DEQUE *dq, char *name, int val) { // 資料附加到最後面
struct DQ_DATA *_dqData;
if((_dqData = calloc(1, sizeof(struct DQ_DATA)))) {
_dqData->name = strdup(name);
_dqData->count = val;
dq_append(dq, _dqData);
}
}
int main(int argc, char **argv) {
struct DQ_DATA *_dqData;
DEQUE *dq = dq_init(); // 初始化 deque

data_push(dq, "aaa", 50); // 資料輸入到最前面
data_append(dq, "bbb", 50); // 資料附加到最後面
// 從陣列最前面抓取資料並移除
if((_dqData = dq_pop(dq))) {
free(_dqData->name);
free(_dqData);
}

data_push(dq, "aaa", 50); // 資料輸入到最前面
data_append(dq, "bbb", 50); // 資料附加到最後面
// 從陣列最後面抓取資料並移除
if((_dqData = dq_eject(dq))) {
free(_dqData->name);
free(_dqData);
}

dq_free(dq); // 最後再釋放 deque
}





沒有留言:

張貼留言