順序表的實現

来源:https://www.cnblogs.com/kencszqh/p/18176037
-Advertisement-
Play Games

/******************************************************************************************************** * * file name: Zqh_順序表.c * author : keyword2 ...


/********************************************************************************************************
*
*	file name:	Zqh_順序表.c
* 	author	 :	[email protected]
* 	date	 :	2024/05/05
*	function :	順序表的增刪改查
*	note	 :	模板
*	
*  Copyright (c)  2023-2025   [email protected]    All right Reserved
* ******************************************************************************************************/
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.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));
	//calloc的返回值是是一塊記憶體的首地址
	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_TaiAdd(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)
{
	int temp = -1; 	//記錄要刪除的元素的下標

	//1.判斷順序表是否為空
	if (SeqList_IsEmpty(Manager)){
		printf("SequenceList is Empty!\n");
		return false;
	}

	//2.此時需要查找目標值是否在順序表中
	for (int i = 0; i <= Manager->Last; ++i){

		//如果目標值和順序表中元素的值相同
		if (DestVal == Manager->Addr[i]){

			temp = i; //把目標元素的下標備份到變數temp中
			break;
		}
	}

	//3.如果順序表沒有目標值的元素則直接終止函數
	if (-1 == temp){
		printf("destval [%d] is not found\n",DestVal);
		return false;
	}

	//4.如果找到了目標元素,則直接把元素的後繼元素向前移動一個單位
	for (int i = temp; i < Manager->Last; ++i){
		
		Manager->Addr[i] = Manager->Addr[i+1];

	}
	//5.由於刪除了一個元素,則需要讓順序表的有效元素下標-1
	Manager->Last--;
	
	return true;

}


//遍歷順序表的元素
void SeqList_Print(SeqList_t*Manager)
{
	for (int i = 0; i <=Manager->Last; ++i){
		printf("Element[%d] = %d\n",Manager->Addr[i] );
	}

}



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

-Advertisement-
Play Games
更多相關文章
  • 摘要:作為Valkey社區的Technical Steering Committee member,華為雲將持續參與社區建設。 一、背景 今年3月21日,Redis Labs宣佈從Redis 7.4版本開始,將原先比較寬鬆的BSD源碼使用協議修改為RSAv2和SSPLv1協議,意味著 Redis在O ...
  • 本文介紹基於Microsoft SQL Server軟體,實現資料庫表中多種數據查詢方法的具體操作。 目錄1 指定列或全部列查詢——查詢S表學生記錄2 指定列或全部列查詢——查詢學生姓名與出生年份3 按條件查詢及模糊查詢——查詢成績不及格學生學號4 按條件查詢及模糊查詢——查詢20-23歲間學生姓名 ...
  • 在Kafka中,Broker、Topic、Partition和Replication是四個核心概念,它們各自扮演了不同的角色並共同協作以確保數據的可靠性、可擴展性和高性能。以下是關於這四個概念的詳細解釋: Broker(代理) * Broker是Kafka集群中的一個節點,負責存儲和轉發消息。Kaf ...
  • 一、是什麼 當對一個文檔進行佈局(layout)的時候,瀏覽器的渲染引擎會根據標準之一的 CSS 基礎框盒模型(CSS basic box model),將所有元素表示為一個個矩形的盒子(box) 一個盒子由四個部分組成:content、padding、border、margin content,即 ...
  • 本文的目的,是為了讓已經有 Vue2 開發經驗的 人 ,快速掌握 Vue3 的寫法。 因此, 本篇假定你已經掌握 Vue 的核心內容 ,只為你介紹編寫 Vue3 代碼,需要瞭解的內容。 一、Vue3 里 script 的三種寫法 首先,Vue3 新增了一個叫做組合式 api 的東西,英文名叫 Com ...
  • 最近,群里在討論一個很有意思的線條動畫效果,效果大致如下: 簡單而言,就是線條沿著不規則路徑的行進動畫,其中的線條動畫可以理解為是特殊的光效。 本文,我們將一起探索,看看在不使用 JavaScript/Canvas 的基礎上,使用純 CSS/SVG 的方式,我們可以如何大致的還原上述的線條動畫效果。 ...
  • 前言 jquery時代更新視圖是直接對DOM進行操作,缺點是頻繁操作真實 DOM,性能差。react和vue時代引入了虛擬DOM,更新視圖是對新舊虛擬DOM樹進行一層層的遍歷比較,然後找出需要更新的DOM節點進行更新。這樣做的缺點就是如果DOM樹很複雜,在進行新舊DOM樹比較的時候性能就比較差了。那 ...
  • X-Frame-Options 是一個HTTP響應頭,用於控制網頁是否可以嵌套在 <frame>, <iframe>, <embed> 或者 <applet> 中。通過設置 X-Frame-Options 頭部,網站管理員可以防止網頁被嵌套到其他網站的框架中,從而有效防範點擊劫持等安全風險。下麵是關 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...