當前位置:編程學習大全網 - 源碼下載 - 數據結構c源代碼

數據結構c源代碼

這是鏈式隊列的代碼:

#包含“stdio.h”

#包含" stdlib.h "

#包含“io.h”

#包含“math.h”

#包含“time.h”

#定義OK 1

#定義錯誤0

#定義真1

#定義假0

#define MAXSIZE 20 /*存儲空間的初始分配*/

typedef int狀態;

typedef int QElemType/* qelemtype的類型取決於實際情況,假設為int */

Typedef結構QNode /*節點結構*/

{

QElemType數據;

struct QNode * next

}QNode,* QueuePtr

Typedef struct /*隊列的鏈表結構*/

{

QueuePtr前、後;/*團隊領導和團隊尾指針*/

} LinkQueue

狀態訪問(QElemType c)

{

printf("%d ",c);

退貨OK;

}

/*構造壹個空隊列Q */

狀態初始化隊列(鏈接隊列*Q)

{

q->;front = Q-& gt;rear =(queue ptr)malloc(sizeof(QNode));

如果(!q->;正面)

退出(溢出);

q->;正面-& gt;next = NULL

退貨OK;

}

/*銷毀隊列Q */

狀態銷毀隊列(鏈接隊列*Q)

{

while(Q->;正面)

{

q->;rear = Q-& gt;正面-& gt;接下來;

免費(Q->;正面);

q->;front = Q-& gt;後方;

}

退貨OK;

}

/*將Q清除到空隊列*/

狀態清除隊列(鏈接隊列*Q)

{

QueuePtr p,q;

q->;rear = Q-& gt;正面;

p = Q-& gt;正面-& gt;接下來;

q->;正面-& gt;next = NULL

while(p)

{

q = p;

p = p-& gt;接下來;

免費(q);

}

退貨OK;

}

/*如果Q是空隊列,則返回TRUE,否則返回FALSE */

狀態隊列空(鏈接隊列Q)

{

if(Q.front==Q.rear)

返回TRUE

其他

返回FALSE

}

/*求隊列的長度*/

int QueueLength(鏈接隊列Q)

{

int I = 0;

queue ptr p;

p = Q.front

而(Q.rear!=p)

{

i++;

p = p-& gt;接下來;

}

返回I;

}

/*如果隊列不為空,用e返回Q的隊列頭元素,返回OK,否則返回ERROR */

狀態GetHead(鏈接隊列Q,QElemType *e)

{

queue ptr p;

if(Q.front==Q.rear)

返回錯誤;

p = q . front-& gt;接下來;

* e = p-& gt;數據;

退貨OK;

}

/*插入壹個新的尾部元素,其元素E是Q */

狀態排隊(鏈接隊列*Q,隊列類型e)

{

queue ptr s =(queue ptr)malloc(sizeof(QNode));

如果(!S) /*存儲分配失敗*/

退出(溢出);

s-& gt;數據= e;

s-& gt;next = NULL

q->;後方-& gt;next = s;/*將帶有元素E的新節點S分配給原尾節點的後繼,如圖① */

q->;rear = s;/*設置當前S為隊列的結束節點,後方指向S,如圖② */

退貨OK;

}

/*如果隊列不為空,刪除Q的隊列頭元素,用E返回其值,返回OK,否則返回ERROR */

狀態出列(鏈接隊列*Q,隊列類型*e)

{

queue ptr p;

如果(Q->;front = = Q-& gt;後部)

返回錯誤;

p = Q-& gt;正面-& gt;接下來;/*將要刪除的組長節點臨時存儲到P中,如圖① */

* e = p-& gt;數據;/*將要刪除的隊列頭節點的值賦給e */

q->;正面-& gt;next = p-& gt;接下來;/*將原組長節點的繼任者替換為p->;Next給頭節點的後繼節點賦值,如圖② */

如果(Q->;Rear==p) /*如果隊頭是隊尾,則刪除,將後方指向頭節點,如圖③ */

q->;rear = Q-& gt;正面;

免費(p);

退貨OK;

}

/*輸出*/

狀態隊列遍歷(鏈接隊列Q)

{

queue ptr p;

p = q . front-& gt;接下來;

while(p)

{

請訪問(p->;數據);

p = p-& gt;接下來;

}

printf(" \ n ");

退貨OK;

}

int main()

{

int I;

QElemType d;

link queue q;

I = init queue(& amp;q);

如果(我)

Printf("成功構造了壹個空隊列!\ n ");

排隊(& ampq,-5);

排隊(& ampq,5);

排隊(& ampq,10);

Printf("插入三個元素(-5,5,10)後,隊列長度為%d\n ",queue length(q));

Printf("隊列的元素是:");

queue traverse(q);

i=GetHead(q,& ampd);

如果(i==OK)

Printf("隊列頭元素為:%d\n ",d);

出列(& amp問& ampd);

Printf("已刪除的隊列頭元素%d\n ",d);

i=GetHead(q,& ampd);

如果(i==OK)

Printf("新組長元素為:%d\n ",d);

clear queue(& amp;q);

Printf("清除隊列後,q . front = % q . front = % u q . rear = % u q . front->-->;next=%u\n ",q.front,q.rear,q . front-& gt;下壹個);

destroy queue(& amp;q);

Printf("銷毀隊列後,q.front =% u.q.rear =% u \ n ",q.front,q . rear);

返回0;

}

這是壹個二叉樹後序遍歷代碼:

void後序(二叉樹根)

{

if(root==NULL)

返回;

後序(根-& gt;l child);//遞歸調用,然後遍歷左子樹。

後序(根-& gt;rchild);//遞歸調用,然後遍歷右邊的子樹。

printf("%c ",root-& gt;數據);//輸出數據

}

希望能幫到妳。如果還是不明白,可以加我QQ:11301655。

  • 上一篇:幫我翻譯壹下,英譯漢,在線等,謝謝!Thank you for contacting Customer Service at www.gnc.com
  • 下一篇:什麽叫信息發布系統 他們的功能有哪些
  • copyright 2024編程學習大全網