原创 雙向循環鏈表

/* c2-4.h 線性表的雙向鏈表存儲結構 */ typedef struct DuLNode { ElemType data; struct DuLNode *prior,*next; }DuLNode,*DuL

原创 雞尾酒排序算法

雞尾酒排序,也就是定向冒泡排序, 雞尾酒攪拌排序, 攪拌排序 (也可以視作選擇排序的一種變形), 漣漪排序, 來回排序 or 快樂小時排序, 是冒泡排序的一種變形。此算法與冒泡排序的不同處在於排序時是以雙向在序列中進行排序。 #incl

原创 順序隊列

/* c3-3.h 隊列的順序存儲結構(可用於循環隊列和非循環隊列) */ #define MAXQSIZE 5 /* 最大隊列長度(對於循環隊列,最大隊列長度要減1) */ typedef struct { QElemT

原创 奇偶排序算法

奇偶排序,或奇偶換位排序,或磚排序,是一種相對簡單的排序算法,最初發明用於有本地互連的並行計算。這是與冒泡排序特點類似的一種比較排序。該算法中,通過比較數組中相鄰的(奇-偶)位置數字對,如果該奇偶對是錯誤的順序(第一個大於第二個),則交

原创 單鏈隊列

/* c3-2.h 單鏈隊列--隊列的鏈式存儲結構 */ typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr;

原创 (Problem 92)Square digit chains

A number chain is created by continuously adding the square of the digits in a number to form a new number until it ha

原创 計算機排序算法

在計算機科學與數學中,一個排序算法(Sorting algorithm)是一種能將一串數據依照特定排序方式的一種算法。最常用到的排序方式是數值順序以及字典順序。有效的排序算法在一些算法(例如搜索算法與合併算法)中是重要的,如此這些算法才

原创 線性表的單鏈表表示和實現

/* c2-2.h 線性表的單鏈表存儲結構 */ struct LNode { ElemType data; struct LNode *next; }; typedef struct LNode *LinkLis

原创 棧的順序存儲表示

/* c3-1.h 棧的順序存儲表示 */ #define STACK_INIT_SIZE 10 /* 存儲空間初始分配量 */ #define STACKINCREMENT 2 /* 存儲空間分配增量 */ typedef s

原创 串的堆分配存儲

/* c4-2.h 串的堆分配存儲 */ typedef struct { char *ch; /* 若是非空串,則按串長分配存儲區,否則ch爲NULL */ int length; /* 串長度 */ }HStri

原创 串的塊鏈存儲表示

/* c4-3.h 串的塊鏈存儲表示 */ #define CHUNKSIZE 4 /* 可由用戶定義的塊大小 */ typedef struct Chunk { char ch[CHUNKSIZE]; struct

原创 冒泡排序算法

冒泡排序(Bubble Sort)是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因爲

原创 C語言函數指針的用法

函數指針是一種在C、C++、D語言、其他類 C 語言和Fortran 2003中的指針。函數指針可以像一般函數一樣,用於調用函數、傳遞參數。在如 C 這樣的語言中,通過提供一個簡單的選取、執行函數的方法,函數指針可以簡化代碼。 函數指針

原创 C語言退出多層嵌套循環技巧

由於break語句只能影響它的最內層循環,要想立即從深層嵌套循環中退出,有哪些方法呢? 1、使用goto語句: while(condition1) { while(condition2) { while(cond

原创 C語言實現泛型編程

泛型編程讓你編寫完全一般化並可重複使用的算法,其效率與針對某特定數據類型而設計的算法相同。在C語言中,可以通過一些手段實現這樣的泛型編程。這裏介紹一種方法——通過無類型指針void* 看下面的一個實現交換兩個元素內容的函數swap,以整