首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言經典數據結構代碼庫:隊列、棧、樹、圖完整實現

     編輯:關於C

前言

網上許多 C 語言數據結構代碼存在無法編譯、邏輯錯誤等問題。本文整理了四大基礎結構的可直接編譯運行版本,附帶運行截圖,適合教學、面試復習、項目參考。


1. 循環隊列

結構體封裝數組、front/rear 指針,支持初始化、入隊、出隊、判空/判滿、遍歷。

#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 50
typedef struct { int data[QUEUE_SIZE]; int front, rear; } Queue;
Queue* InitQueue() { ... }
int IsFull(Queue* q) { return (q->rear+1)%QUEUE_SIZE == q->front; }
int IsEmpty(Queue* q) { return q->front == q->rear; }
void Enqueue(Queue* q, int n) { if(IsFull(q)) return; q->data[q->rear]=n; q->rear=(q->rear+1)%QUEUE_SIZE; }
int Dequeue(Queue* q) { if(IsEmpty(q)) return 0; int t=q->data[q->front]; q->front=(q->front+1)%QUEUE_SIZE; return t; }
int main() { Queue* q=InitQueue(); for(int i=0;i<10;i++) Enqueue(q,i*i); while(!IsEmpty(q)) printf("%d->",Dequeue(q)); }

隊列運行截圖


2. 鏈式棧

節點含數據域與指針域,棧結構體維護 top/bottom。實現初始化、壓棧、出棧、遍歷、判空、清空。

#include <stdio.h> #include <stdlib.h> #include <malloc.h>
typedef struct node { int member; struct node* pNext; } Node, *pNode;
typedef struct { pNode Top, Bottom; } Stack, *pStack;
void InitStack(pStack); bool Push(pStack,int); void TraverseStack(pStack);
bool Empty(pStack); int Pop(pStack); void Clear(pStack);
int main() { Stack s; InitStack(&s); /* 輸入數據壓棧 -> 遍歷 -> 出棧 -> 遍歷 -> 清空 -> 遍歷 */ }

棧運行截圖


3. 二叉樹

先序創建(-1 表示空),支持先/中/後序遍歷、求深度、統計葉子節點。

#include <stdio.h> #include <stdlib.h>
typedef int ElemType, Status;
typedef struct BiTNode { ElemType data; struct BiTNode *lChild, *rChild; } BiTNode, *BiTree;
Status CreateBiTree(BiTree* T) { /* 遞歸創建 */ }
void TraverseBiTree(BiTree T) { if(!T) return; printf("%d ",T->data); TraverseBiTree(T->lChild); TraverseBiTree(T->rChild); }
void InOrderBiTree(BiTree T) { if(!T) return; InOrderBiTree(T->lChild); printf("%d ",T->data); InOrderBiTree(T->rChild); }
void PostOrderBiTree(BiTree T) { if(!T) return; PostOrderBiTree(T->lChild); PostOrderBiTree(T->rChild); printf("%d ",T->data); }
int TreeDeep(BiTree T) { if(!T) return 0; return max(TreeDeep(T->lChild),TreeDeep(T->rChild))+1; }
int LeafCount(BiTree T,int& n) { if(T){ if(!T->lChild&&!T->rChild) n++; LeafCount(T->lChild,n); LeafCount(T->rChild,n);} return n; }

二叉樹運行截圖


4. 圖

鄰接表存儲(支持有向/無向),實現 DFS(遞歸)與 BFS(隊列)遍歷。交互式菜單演示。

#include <stdio.h> #include <malloc.h> #include <stdlib.h>
#define MAX 20
struct tnode { struct tnode* next; int data; };
struct node { int valu; struct tnode* link; };
struct picture { struct node nd[MAX]; int count; char type; };
/* createpicture() 建圖,search() 查找頂點索引,
   traversedfs()/traversebfs() 入口,dfs()/bfs() 核心遍歷 */
int main() { struct picture* p=createpicture(); /* 交互選擇 DFS/BFS/清屏/退出 */ }

圖遍歷運行截圖


源碼下載

完整工程打包:百度網盤,目錄名 sjjgdemo-c。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved