結構體學習

来源:https://www.cnblogs.com/wh217/p/18147842
-Advertisement-
Play Games

/******************************************************************************************************** * * 提高可移植性 Copyright (c) 2023-2024 cececlmx@ ...


/********************************************************************************************************
*
*

  • 提高可移植性
  • Copyright (c) 2023-2024 [email protected] All right Reserved
  • ******************************************************************************************************/

include <stdio.h>

include <stdbool.h>

//指的是順序表中的元素的數據類型,用戶可以根據需要進行修改
typedef int DataType_t;

//構造記錄順序表SequenceList各項參數(順序表的首地址 + 順序表的容量 + 順序表中最後有效元素的下標)的結構體
typedef struct SequenceList
{
DataType_t * Addr; //記錄順序表首地址
unsigned int Size; //記錄順序表的容量
int Last; //順序表中最後元素的下標

}SeqList_t;

//創建順序表並對順序表進行初始化
SeqList_t * SeqList_Create(unsigned int size)
{
//1.利用calloc為順序表的管理結構體申請一塊堆記憶體
SeqList_t *Manager = (SeqList_t *)calloc(1,sizeof(Manager));

if(NULL == Manager)
{
	perror("calloc memory for manager is failed");
	exit(-1); //程式異常終止
}

//2.利用calloc為所有元素申請堆記憶體
Manager->Addr = (DataType_t *)calloc(size,sizeof(DataType_t));

if (NULL == Manager->Addr)
{
	perror("calloc memory for element is failed");
	free(Manager);
	exit(-1); //程式異常終止
}

//3.對管理順序表的結構體進行初始化(元素容量 + 最後元素下標)
Manager->Size = size;	//對順序表中的容量進行初始化
Manager->Last = -1;		//由於順序表為空,則最後元素下標初值為-1

return Manager;

}

//判斷順序表是否已滿
bool SeqList_IsFull(SeqList_t *Manager)
{
return (Manager->Last + 1 == Manager->Size) ? true : false;
}

//向順序表的尾部加入元素
bool SeqList_TailAdd(SeqList_t *Manager, DataType_t Data)
{
//1.判斷順序表是否已滿
if ( SeqList_IsFull(Manager) )
{
printf("SequenceList is Full!\n");
return false;
}

//2.如果順序表有空閑空間,則把新元素添加到順序表尾部
Manager->Addr[++Manager->Last] = Data;

return true;

}

//向順序表的頭部加入元素
bool SeqList_HeadAdd(SeqList_t *Manager, DataType_t Data)
{
//1.判斷順序表是否已滿
if ( SeqList_IsFull(Manager) )
{
printf("SequenceList is Full!\n");
return false;
}

//2.如果順序表有空閑空間,則需要把順序表所有元素向後移動1個單位
for (int i = Manager->Last;i >= 0;i--)
{
	Manager->Addr[i+1] = Manager->Addr[i];
}

//3把新元素添加到順序表的頭部,並且更新管理結構體中的元素下標+1
Manager->Addr[0] = Data;
Manager->Last++;

return true;

}

//判斷順序表是否已滿
bool SeqList_IsEmpty(SeqList_t *Manager)
{
return (-1 == Manager->Last) ? true : false;
}

//刪除順序表的元素
bool SeqList_Del(SeqList_t *Manager,DataType_t DestVal)
{
//1.判斷順序表是否為空
if ( SeqList_IsEmpty(Manager) )
{
printf("SequenceList is Empty!\n");
return false;
}

//2.此時需要查找目標值是否在順序表中
if (存在目標值)
{
	//剛好在尾部
	//剛好在頭部
	//剛好在中間
}
else
{
	return false;
}

}

//遍歷順序表的元素
SeqList_Print(SeqList_t *Manager)

int main(int argc, char const *argv[])
{

//1.創建順序表
SeqList_t * Manager = SeqList_Create(10);





return 0;

}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目:對順序表中的元素進行增加和刪除以及訪問 使用數組實現線性表的特性,需要知道三個條件:數組元素的容量、數組有效的最後一個元素的下標 /************************************************************************* * file ...
  • 順序表 題目一: 題目分析: 該題目需要先對順序表進行遍歷至元素x正確插入位置,再對順序表完成插入操作。因此涉及到for迴圈與if語句的使用 代碼實現 /******************************************************************** * * ...
  • 1:在離線的環境中導入鏡像 在無法訪問外網的情況下,通過將docker鏡像導出為一個包,然後導入到另外的一臺電腦上面,從而實現了不用訪問外網就能拉取鏡像了 #將鏡像輸出到這個tar包 [root@cleint ~]# docker save -o centos.tar centos #通過第三方的 ...
  • 2.1.1 命令提示符 在CentOS 7操作系統中,Linux命令提示符就像是你與電腦交流的一個小標誌,告訴你系統已經準備好接受你的指令了。 它通常會顯示在你打開的終端視窗或控制台的最前面。 讓我們來看一個示例: [root@node01 ~]$ 在這個示例中: root:是當前登錄的用戶名。 @ ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是在i.MXRT1xxx系列上用NAND型啟動設備時可用兩級設計縮短啟動時間。 去年痞子衡寫過一篇騷操作文章 《藉助i.MXRT10xx系列INIT_VTOR功能可以縮短程式熱重啟時間》,這對於 NAND 型啟動設備上程式熱重啟時間的縮短 ...
  • 聲明: 以下內容為個人筆記,內容不完全正確,請謹慎參考。 正則表達式 含義: 正則表達式使用的每個單獨字元串來描述、匹配一些列符合語法規則的字元串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些符合某個模式的文本。在Linux中,grep,sed,awk等文本處理工具都支持正則表達式進行模式 ...
  • 在上一篇中,老周用 .NET Nano Framework 給大伙伴們演示了 WS2812 燈帶的控制,包括用 SPI 和 紅外RMT 的方式。利用 RMT 是一個很機靈的方案,不過,可能很多大伙伴對 ESP32 的 RMT 不是很熟悉。除了樂鑫自己的文檔,沒幾個人寫過相關的水文,可見這裡頭空白的水 ...
  • 聲明: 以下為個人筆記,內容不完全正確,請謹慎參考。 while迴圈 while迴圈結構 while [條件判斷] do 程式 done 腳本示例: 點擊查看代碼 #!/bin/bash while [ $a -le $1] do sum=$[ $sum + $a ] done echo $sum ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...