佇列先進先出,涉及到兩個位置的操作,乙個是隊首,乙個是隊尾,我們分別用兩個整型變數來表示隊首和隊尾,另外需要注意的是我們實現佇列時要借助迴圈陣列,具體在**中已經很清楚了。實現過程中的技巧與用陣列實現棧時大多數一樣。
首先,我們來宣告型別,結構和例程。
/**
* @file queue.h
* @brief 用鍊錶實現佇列-宣告adt部分
* @details
* @author [email protected]
* @date 2014-5-20
*/#include #ifndef _queue_h
//實現佇列所需的結構和型別
typedef int elementtype;
struct queuerecord;
typedef struct queuerecord *queue;
int isempty(queue q); //判空
int isfull(queue q); //判滿
queue createqueue(int maxelements); //建立佇列
void disposequeue(queue q); //消除佇列
void makeempty(queue q); //置空佇列
void enqueue(elementtype x, queue q); //入隊
elementtype front(queue q); //返回隊首
void dequeue(queue q); //出隊
elementtype frontanddequeue(queue q); //出隊並返回隊首
void fatalerror(char *str); //錯誤資訊
static int succ(int value, queue q); //隊首或隊尾的前移
#endif // _queue_h
然後實現他們:
/**
* @file queue.c
* @brief 用鍊錶實現佇列-實現部分
* @details
* @author [email protected]
* @date 2014-5-20
*/#include #include #define minqueuesize (5) //最小佇列大小
struct queuerecord
;//判斷佇列是否為空
int isempty(queue q)
//構造空佇列
void makeempty(queue q)
//錯誤資訊
void fatalerror(char *str)
//隊頭或隊尾的移動
static int succ(int value, queue q)
//入隊
void enqueue(elementtype x, queue q)
}//判斷佇列是否滿
int isfull(queue q)
//建立佇列
queue createqueue(int maxelements)
//消除佇列
void disposequeue(queue q)
}//返回隊首元素
elementtype front(queue q)
//出隊
void dequeue(queue q)
}//出隊並返回隊首
elementtype frontanddequeue(queue q)
return 0;
}
最後在主程式中測試。
/**
* @file main.c
* @brief 用鍊錶實現佇列-測試部分
* @details
* @author [email protected]
* @date 2014-5-20
*/#include #include #include int main()
經過了這幾個程式,我們大體上已經掌握了鍊錶,佇列和棧的基本實現和常用例程,當然,這只是個基礎,對於這幾個程式,乙個合格的程式設計師應該做到爛熟於心,關於這幾個資料結構的常用應用,我會在後面慢慢來做,下一步,我們就開始學習資料結構中另乙個非常重要的部分—排序。
資料結構與演算法分析 用C語言實現單鏈表
掌握單鏈表很容易,把下面的 弄懂,敲幾遍,全部記住,而且記清每乙個細節。首先,在list.h中宣告單鏈表的adt.我們把我們所需要的自定義型別啊,函式啊,都宣告出來,但這裡我們只是宣告他們,而具體實現則是在list.c中進行。file list.h brief 單鏈表的宣告 details auth...
資料結構與演算法(六)查詢 c語言實現
靜態查詢表 include include include define max 20 typedef struct elemtype typedef struct stable stable initlist int n for int i 0 i n i st length n return s...
資料結構 查詢演算法 用c語言實現查詢演算法《一》)
一 查詢的分類 1 靜態查詢 不進行插入和刪除操作。2 動態查詢 可進行插入和刪除操作。按查詢的基本方法可分為 比較查詢法和計算查詢法。按元素的組織結構可分為 基於線性表的查詢和基於樹的查詢。二 順序查詢 基於線性表 1 陣列順序儲存 靜態 比較查詢 include define list size...