原理:
由於棧是先進後出的,所以,讓資料先進入乙個棧中,然後依次從棧頂彈出,在依次進入另乙個棧中,最後,從另乙個棧中彈出,並輸出,這樣就變為先進先出了,實現了我們的佇列
實現**
#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中元素的個數是否...