進階-數據結構部分:1、數據結構入門

飛書文檔https://x509p6c8to.feishu.cn/wiki/HRLkwznHiiOgZqkqhLrcZNqVnLd

一、存儲結構

順序存儲

鏈式存儲

二、常用數據結構

2.1、棧

先進后出

場景:

后退/前進功能:網頁瀏覽器中的后退和前進按鈕可以使用棧來實現。在瀏覽網頁時,每次訪問一個新頁面時,當前頁面的信息將被推入棧中。當用戶點擊后退按鈕時,程序將從棧中彈出最近的訪問頁面,并顯示上一個頁面。


#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STACK_SIZE 100typedef struct {char url[MAX_STACK_SIZE];
} StackItem;typedef struct {StackItem items[MAX_STACK_SIZE];int top;
} Stack;void initStack(Stack *stack) {stack->top = -1;
}int isStackEmpty(Stack *stack) {return stack->top == -1;
}int isStackFull(Stack *stack) {return stack->top == MAX_STACK_SIZE - 1;
}void push(Stack *stack, char *url) {if (isStackFull(stack)) {printf("Stack overflow!\n");return;}stack->top++;strcpy(stack->items[stack->top].url, url);
}char* pop(Stack *stack) {if (isStackEmpty(stack)) {printf("Stack underflow!\n");return NULL;}char *url = stack->items[stack->top].url;stack->top--;return url;
}int main() {char inputurl[MAX_STACK_SIZE];int choice;Stack stack;initStack(&stack);while (1){printf("------》1:入棧\n");printf("------》2:出棧\n");scanf("%d",&choice);switch (choice){case 1:printf("請輸入入棧內容:");scanf("%s",inputurl);push(&stack,inputurl);printf("入棧成功\n");break;case 2:if (!isStackEmpty(&stack)) {char *url = pop(&stack);printf("出棧:%s\n", url);}else{printf("已沒有數據\n");}break;default:printf("無效操作\n");break;}}return 0;
}

2.2、隊列

場景:

編寫代碼,實現演唱會購票用戶(id、座位區域(A、B、C))購票與出票。

分析:

按購票順序先后處理,先購票先出票

#include <stdio.h>#define MAX_AREA_SIZE 10
#define MAX_QUEUE_SIZE 5typedef struct {int id;char area[MAX_AREA_SIZE];
} User;typedef struct {User data[MAX_QUEUE_SIZE];int front; //隊列頭位置int rear;? //隊列尾位置
} Queue;/*** @brief 初始化隊列* 初始化時,由于隊列為空,隊列頭和尾位置都在0* @param q*/
void initQueue(Queue *q) {q->front = q->rear = 0;
}/*** @brief 判斷隊列是否為空* 當隊列頭位置和尾位置相同時,隊列為空* @param q* @return int*/
int isQueueEmpty(Queue *q) {return q->front == q->rear;
}/*** @brief 判斷隊列是否滿* 當隊列尾位置+1等于隊列頭位置時,隊列滿(隊列尾位置追上頭位置)* @param q* @return int*/
int isQueueFull(Queue *q) {return (q->rear + 1) % MAX_QUEUE_SIZE == q->front;
}/*** @brief 入隊* 先判斷隊列是否滿,然后存儲數據到隊列尾位置,隊列尾位置+1* @param q* @param s* @return int*/
int enqueue(Queue *q, User *s) {if (isQueueFull(q)) {return 0;}printf("id=%d, area=%s ", s->id, s->area);q->data[q->rear] = *s;q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;return 1;
}
/*** @brief 出隊* 先判斷隊列是否空,然后讀取隊列頭的數據,隊列頭位置+1* @param q* @param s* @return int*/
int dequeue(Queue *q, User *s) {if (isQueueEmpty(q)) {return 0;}*s = q->data[q->front];printf("id=%d, area=%s\n", s->id, s->area);q->front = (q->front + 1) % MAX_QUEUE_SIZE;return 1;
}int main() {int id = 0;User user;int choice;Queue q;initQueue(&q);while (1){printf("------》1:顧客購票\n");printf("------》2:工作人員出票\n");scanf("%d",&choice);switch (choice){case 1:printf("請輸入購票區域:");user.id = id ++;scanf("%s",user.area);if(enqueue(&q, &user) == 1)printf("支付成功,等待工作人員處理\n");elseprintf("支付失敗,當前無票\n");break;case 2:printf("出票:");User s;if (!dequeue(&q, &s)) {printf("已沒有購票需要處理\n");}break;default:printf("無效操作\n");break;}}return 0;
}

2.3、鏈表

場景:實現一個用戶信息管理系統,支持插入、查找、刪除

分析:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定義用戶結構體
typedef struct User {char name[50];int age;struct User *next;
} User;// 初始化鏈表頭節點
User *head = NULL;// 插入用戶信息
void insertUser() {User *newUser = (User *) malloc(sizeof(User));printf("請輸入用戶名:");scanf("%s", newUser->name);printf("請輸入年齡:");scanf("%d", &newUser->age);newUser->next = NULL;if (head == NULL) {head = newUser;} else {User *temp = head;while (temp->next != NULL) {temp = temp->next;}temp->next = newUser;}printf("用戶信息插入成功!\n");
}// 刪除用戶信息
void deleteUser() {if (head == NULL) {printf("鏈表為空,無法刪除用戶信息!\n");return;}char name[50];printf("請輸入要刪除的用戶名:");scanf("%s", name);User *temp = head;User *prev = NULL;while (temp != NULL && strcmp(temp->name, name) != 0) {prev = temp;temp = temp->next;}if (temp == NULL) {printf("未找到要刪除的用戶信息!\n");return;}if (prev == NULL) {head = temp->next;} else {prev->next = temp->next;}free(temp);printf("用戶信息刪除成功!\n");
}// 查找用戶信息
void findUser() {if (head == NULL) {printf("鏈表為空,無法查找用戶信息!\n");return;}char name[50];printf("請輸入要查找的用戶名:");scanf("%s", name);User *temp = head;while (temp != NULL && strcmp(temp->name, name) != 0) {temp = temp->next;}if (temp == NULL) {printf("未找到要查找的用戶信息!\n");} else {printf("用戶名:%s,年齡:%d\n", temp->name, temp->age);}
}int main() {int choice;while (1) {printf("請選擇要執行的操作:\n");printf("1. 插入用戶信息\n");printf("2. 刪除用戶信息\n");printf("3. 查找用戶信息\n");printf("4. 退出程序\n");printf("請輸入操作編號:");scanf("%d", &choice);switch (choice) {case 1:insertUser();break;case 2:deleteUser();break;case 3:findUser();break;case 4:exit(0);default:printf("輸入的操作編號有誤,請重新輸入!\n");break;}}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/81615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/81615.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/81615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HarmonyOS Navigation組件深度解析與應用實踐

HarmonyOS Navigation組件深度解析與應用實踐 一、組件架構與核心能力 HarmonyOS Navigation組件作為路由導航的根視圖容器&#xff0c;采用三層架構設計&#xff1a; 標題層&#xff1a;支持主副標題配置&#xff0c;提供Mini/Free/Full三種顯示模式內容層&#xff1a;默認…

基于AI的Web數據管道,使用n8n、Scrapeless和Claude

引言 在當今數據驅動的環境中&#xff0c;組織需要高效的方法來提取、處理和分析網絡內容。傳統的網絡抓取面臨著諸多挑戰&#xff1a;反機器人保護、復雜的JavaScript渲染以及持續的維護需求。此外&#xff0c;理解非結構化的網絡數據則需要復雜的處理能力。 本指南演示了如…

Cadence學習筆記之---PCB器件放置與布局

目錄 01 | 引 言 02 | 環境描述 03 | 元件放置 04 | 布局相關操作 06 | 總 結 01 | 引 言 在上一篇文章中&#xff0c;介紹了如何設置PCB的電氣規則約束&#xff0c;以及如何設置層疊&#xff0c;到此我們已經完成了使用Cadence設計PCB的前期準備工作&#xff1b; 在本篇…

力扣HOT100之二叉樹:199. 二叉樹的右視圖

這道題沒啥好說的&#xff0c;首先定義一個向量來保存每一層的最后一個元素&#xff0c;直接用層序遍歷&#xff08;廣度優先搜索&#xff09;遍歷二叉樹&#xff0c;然后將每一層的最后一個元素加入到這個向量中即可。屬于是二叉樹層序遍歷的模板題。 /*** Definition for a …

CSS:三大特性

文章目錄 一、層疊性二、繼承性三、優先級 一、層疊性 二、繼承性 可以在MDN網站上查看屬性是否可以被繼承 例如color 三、優先級

C++經典庫介紹

在 C 開發的漫長歷程中&#xff0c;涌現出了許多經典的庫&#xff0c;它們在不同的領域發揮著重要作用&#xff0c;極大地提升了 C 開發的效率和質量。下面為你介紹一些 C 開發中的經典庫。 標準模板庫&#xff08;STL&#xff09; STL 堪稱 C 編程領域的基石&#xff0c;是每…

Git本地使用小Tips

要將本地倉庫 d:\test 的更新推送到另一個本地倉庫 e:\test&#xff0c;可以使用 Git 的遠程倉庫功能。以下是具體步驟&#xff1a; ??在 e:\test 中添加 d:\test 作為遠程倉庫?? 在 e:\test 目錄中打開 Git Bash 或命令行&#xff0c;執行以下命令&#xff1a; git remo…

AWS SageMaker vs Bedrock:該選哪個?

隨著生成式 AI 的快速崛起&#xff0c;越來越多企業希望借助云上工具&#xff0c;加速 AI 應用的構建與落地。AWS 作為領先的云服務提供商&#xff0c;提供了兩款核心 AI 服務&#xff1a;Amazon SageMaker 和 Amazon Bedrock。它們雖然同屬 AWS AI 生態系統&#xff0c;但定位…

51單片機的lcd12864驅動程序

#include <reg51.h> #include <intrins.h>#define uchar

Git .gitattributes 文件用途詳解

.gitattributes 是 Git 版本控制系統中的一個配置文件&#xff0c;用于定義特定文件或路徑的屬性&#xff0c;從而控制 Git 如何處理這些文件。它類似于 .gitignore&#xff0c;但功能更廣泛&#xff0c;可以精細化管理文件在版本控制中的行為。 主要用途 以下是 .gitattribut…

使用 Apache POI 生成 Word 文檔

創建一個包含標題、段落和表格的簡單文檔。 步驟 1:添加依賴 確保你的項目中已經添加了 Apache POI 的依賴。如果你使用的是 Maven,可以在 pom.xml 中添加以下內容: <dependency><groupId>org.apache.poi</groupId>

數據中心 智慧機房解決方案

該文檔介紹數據中心智慧機房解決方案,涵蓋模塊化數據中心(機柜式、微模塊),具備低成本快速部署、標準化建設等特點;監控管理系統(DCIM)可實現設施、資產、容量、能效管理;節能解決方案含精密空調節能控制柜,節能率高達 30%;還有7X24 小時云值守運維服務。方案亮點包括…

java -jar命令運行 jar包時如何運行外部依賴jar包

java -jar命令運行 jar包時如何運行外部依賴jar包 場景&#xff1a; 打包發不完,運行時。發現一個問題&#xff0c; java java.lang.NoClassDefFoundError: org/apache/commons/lang3/ArrayUtils 顯示此&#xff0c;基本表明&#xff0c;沒有這個依賴&#xff0c;如果在開發…

Halcon與C#:工業級機器視覺開發

Halcon&#xff08;由MVTec開發&#xff09;是一款廣泛應用于工業機器視覺的高性能軟件庫&#xff0c;支持C#、C、Python等多種語言。以下是基于C#的Halcon開發詳解&#xff0c;涵蓋環境配置、核心流程、關鍵API及最佳實踐。 ??1. 開發環境配置?? ??1.1 安裝Halcon?? …

ALTER COLLATION使用場景

ALTER COLLATION 是 SQL 中用于修改字符集排序規則&#xff08;Collation&#xff09;的操作。排序規則定義了字符數據的比較和排序方式&#xff0c;包括字母順序、大小寫敏感性、重音符號處理等。ALTER COLLATION 的使用場景主要集中在需要調整數據庫或表的字符集排序規則時。…

Kafka消息路由分區機制深度解析:架構設計與實現原理

一、消息路由系統的核心架構哲學 1.1 分布式系統的三元悖論 在分布式消息系統的設計過程中&#xff0c;架構師需要平衡三個核心訴求&#xff1a;數據一致性、系統可用性和分區容忍性。Kafka的分區路由機制本質上是對CAP定理的實踐解&#xff1a; 一致性維度&#xff1a;通過…

【網絡實驗】-BGP-EBGP的基本配置

實驗拓撲 實驗要求&#xff1a; 使用兩種方式建立不同AS號的BGP鄰居&#xff0c;不同AS號路由器之間建立的鄰居稱為EBGP鄰居 實驗目的&#xff1a; 熟悉使用物理口和環回口建立鄰居的方式 IP地址規劃&#xff1a; 路由器接口IP地址AR1G0/0/012.1.1.1/24AR1Loopback 01.1.1…

JavaScript:PC端特效--緩動動畫

一、緩動效果原理 緩動動畫就是讓元素運動速度有所變化&#xff0c;最常見的就是讓元素慢慢停下來 思路&#xff1a; 讓盒子每次移動的距離慢慢變小&#xff0c;速度就會慢慢降下來核心算法&#xff1a;&#xff08;目標值-現在位置&#xff09;/10作為每次移動距離的步長停…

高效管理多后端服務:Nginx 配置與實踐指南

在現代的 Web 開發和運維中&#xff0c;一個系統往往由多個后端服務組成&#xff0c;每個服務負責不同的功能模塊。例如&#xff0c;一個電商網站可能包括用戶服務、訂單服務和支付服務&#xff0c;每個服務都運行在獨立的服務器或容器中。為了高效地管理這些服務并提供統一的訪…

2025年PMP 學習二十一 14章 項目立項管理

2025年PMP 學習二十一 14章 項目立項管理 項目立項管理 項目建議 (Project Proposal)項目可行性分析 (Project Feasibility Analysis)項目審批 (Project Approval)項目招投標 (Project Tendering)項目合同談判和簽訂 (Project Contract Negotiation and Signing) 文章目錄 20…