用兩個棧實現佇列

2021-07-04 07:10:35 字數 4251 閱讀 1643

原理:

由於棧是先進後出的,所以,讓資料先進入乙個棧中,然後依次從棧頂彈出,在依次進入另乙個棧中,最後,從另乙個棧中彈出,並輸出,這樣就變為先進先出了,實現了我們的佇列
實現**

#ifndef __linklist_h__

#define __linklist_h__

typedef struct linklistnode linklistnode;

typedef struct linklist linklist;

linklist *linklist_create();

void linklist_destroy(linklist *list);

void linklist_clear(linklist *list);

int linklist_length(linklist *list);

int linklist_insert(linklist *list, linklistnode *node, int

pos);

linklistnode *linklist_get(linklist *list, int

pos);

linklistnode *linklist_delete(linklist *list, int

pos);

#endif //__linklist_h__

#include 

#include "linklist.h"

linklist *linklist_create()

return ret;

}void linklist_destroy(linklist *list)

void linklist_clear(linklist *list)

}int linklist_length(linklist *list)

return ret;

}int linklist_insert(linklist *list, linklistnode *node, int

pos)

node->next = cur->next;

cur->next = node;

list->length++;

}return ret;

}linklistnode *linklist_get(linklist *list, int

pos)

return ret;

}linklistnode *linklist_delete(linklist *list, int

pos)

return ret;

}

#ifndef __linkstack_h__

#define __linkstack_h__

typedef

struct linkstacknode linkstacknode;

typedef

void linkstack;

linkstack *linkstack_create();

void linkstack_destroy(linkstack *stack);

void linkstack_clear(linkstack *stack);

int linkstack_push(linkstack *stack, void *item);

void *linkstack_pop(linkstack *stack);

void *linkstack_top(linkstack *stack);

int linkstack_size(linkstack *stack);

#endif //__linkstack_h__

#include

#include

#include

<

string

.h>

#include

"linkstack.h"

#include

"linklist.h"

linkstack *linkstack_create()

void linkstack_destroy(linkstack *

stack)

void linkstack_clear(linkstack *

stack)

int linkstack_push(linkstack *

stack, void

*item)

if ( !ret )

return ret;

}void

*linkstack_pop(linkstack *

stack)

return ret;

}void

*linkstack_top(linkstack *

stack)

return ret;

}int linkstack_size(linkstack *

stack)

#ifndef __squeue_h__

#define __squeue_h__

#include "linkstack.h"

typedef

struct squeue

squeue;

squeue *squeue_create();

void squeue_destroy(squeue *queue);

void squeue_clear(squeue *queue);

void *squeue_retrieve(squeue *queue);

void *squeue_header(squeue *queue);

int squeue_length(squeue *queue);

#endif //__squeue_h__

#include

#include

#include

"linkstack.h"

#include

"squeue.h"

squeue *squeue_create()

}return ret;

}void squeue_destroy(squeue *

queue)

void squeue_clear(squeue *

queue)

}//入隊

queue, void

*item)

return ret;

}//出隊

void

*squeue_retrieve(squeue *

queue)

}ret = linkstack_pop(queue

->outstack); //out不為空的時候,直接讓它彈出

}return ret;

}//隊頭

void

*squeue_header(squeue *

queue)

}ret = linkstack_top(queue

->outstack); //out不為空的時候,直接讓top取出

}return ret;

}//求長度

int squeue_length(squeue *

queue)

return ret;

}

#include 

#include

#include "squeue.h"

int main( void )

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

while ( squeue_length(queue) > 0 )

printf("\n");

squeue_destroy(queue);

return

0;}

//makefile

.phony : main clean

cc=gcc -g

main: main.o linklist.o linkstack.o squeue.o

$(cc) $^ -o $@

clean:

rm -rf *.o main

用兩個棧實現佇列 用兩個佇列實現棧

劍指offer 面試題7 用兩個棧實現佇列。templateclass cqueue 我們試著用兩個棧來模擬佇列的操作,發現如下可行操作 完整 實現 面試題7 用兩個棧實現佇列 分別完成在隊尾插入結點和在隊頭刪除結點的功能。date 2014 06 27 include include includ...

用兩個棧實現佇列與用兩個佇列實現棧

pragma once要在標頭檔案的最開始加入這條雜注,就能夠保證標頭檔案只被編譯一次 pragma once是編譯器相關的,就是說即使這個編譯系統上有效,但在其他編譯系統也不一定可以,不過現在基本上已經是每個編譯器都有這個雜注了。用兩個棧實現佇列 每個模板函式的實現都需要加template模板列表...

用兩個棧實現佇列 與 用兩個佇列實現棧

用兩個棧實現乙個佇列的功能?要求給出演算法和思路 分析 入隊 將元素進棧a 出隊 判斷棧b是否為空,如果為空,則將棧a中所有元素pop,並push進棧b,棧b出棧 如果不為空,棧b直接出棧。用兩個佇列實現乙個棧的功能?要求給出演算法和思路 分析 入棧 將元素進佇列a 出棧 判斷佇列a中元素的個數是否...