国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)的練習(xí)day2(未完待續(xù))

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)的練習(xí)day2(未完待續(xù))。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

數(shù)據(jù)結(jié)構(gòu)線性結(jié)構(gòu)之單向循環(huán)鏈表的基本操作文章來源地址http://www.zghlxwxcb.cn/news/detail-856693.html

/********************************************************************************************************
 *
 *
 * 設(shè)計(jì)單向循環(huán)鏈表的接口
 *
 *
 *
 * Copyright (c)  2023-2024   17820413718@163.com   All right Reserved
 * ******************************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

// 指的是單向循環(huán)鏈表中的結(jié)點(diǎn)有效數(shù)據(jù)類型,用戶可以根據(jù)需要進(jìn)行修改
typedef int DataType_t;

// 構(gòu)造單向循環(huán)鏈表的結(jié)點(diǎn),鏈表中所有結(jié)點(diǎn)的數(shù)據(jù)類型應(yīng)該是相同的
typedef struct CircularLinkedList
{
	DataType_t data;								 // 結(jié)點(diǎn)的數(shù)據(jù)域
	struct CircularLinkedList *next; // 結(jié)點(diǎn)的指針域

} CircLList_t;

// 遍歷鏈表
bool CircLList_Print(CircLList_t *Head)
{
	// 對單向循環(huán)鏈表的頭結(jié)點(diǎn)的地址進(jìn)行備份
	CircLList_t *Phead = Head;

	// 判斷當(dāng)前鏈表是否為空,為空則直接退出
	if (Head->next == Head)
	{
		printf("current linkeflist is empty!\n");
		return false;
	}

	// 從首結(jié)點(diǎn)開始遍歷
	while (Phead->next)
	{
		// 把頭結(jié)點(diǎn)的直接后繼作為新的頭結(jié)點(diǎn)
		Phead = Phead->next;
		// 輸出頭結(jié)點(diǎn)的直接后繼的數(shù)據(jù)域
		printf("data = %d\n", Phead->data);

		// 判斷是否到達(dá)尾結(jié)點(diǎn),尾結(jié)點(diǎn)的next指針是指向首結(jié)點(diǎn)的地址
		if (Phead->next == Head->next)
		{
			break;
		}
	}

	return true;
}
// 創(chuàng)建一個(gè)空單向循環(huán)鏈表,空鏈表應(yīng)該有一個(gè)頭結(jié)點(diǎn),對鏈表進(jìn)行初始化
CircLList_t *CircLList_Create(void)
{
	// 1.創(chuàng)建一個(gè)頭結(jié)點(diǎn)并對頭結(jié)點(diǎn)申請內(nèi)存
	CircLList_t *Head = (CircLList_t *)calloc(1, sizeof(CircLList_t));
	if (NULL == Head)
	{
		perror("Calloc memory for Head is Failed");
		exit(-1);
	}

	// 2.對頭結(jié)點(diǎn)進(jìn)行初始化,頭結(jié)點(diǎn)是不存儲數(shù)據(jù)域,指針域指向自身,體現(xiàn)“循環(huán)”思想
	Head->next = Head;

	// 3.把頭結(jié)點(diǎn)的地址返回即可
	return Head;
}

// 創(chuàng)建新的結(jié)點(diǎn),并對新結(jié)點(diǎn)進(jìn)行初始化(數(shù)據(jù)域 + 指針域)
CircLList_t *CircLList_NewNode(DataType_t data)
{
	// 1.創(chuàng)建一個(gè)新結(jié)點(diǎn)并對新結(jié)點(diǎn)申請內(nèi)存
	CircLList_t *New = (CircLList_t *)calloc(1, sizeof(CircLList_t));
	if (NULL == New)
	{
		perror("Calloc memory for NewNode is Failed");
		return NULL;
	}

	// 2.對新結(jié)點(diǎn)的數(shù)據(jù)域和指針域進(jìn)行初始化
	New->data = data;
	New->next = NULL;

	return New;
}

// 頭插
bool CircLList_HeadInsert(CircLList_t *Head, DataType_t data)
{
	if (Head == NULL)
	{
		printf("鏈表為空!\n");
		return false;
	}
	// 創(chuàng)建一個(gè)指針代替Head
	CircLList_t *phead = Head;
	// 新建一個(gè)結(jié)點(diǎn)
	CircLList_t *newNode = CircLList_NewNode(data);
	// 讓新建的結(jié)點(diǎn)指向原來的首結(jié)點(diǎn)
	newNode->next = phead->next;
	// 讓頭結(jié)點(diǎn)指向新建的結(jié)點(diǎn)
	phead->next = newNode;
	return true;
}

// 尾插
bool CircLList_TailInsert(CircLList_t *Head, DataType_t data)
{
	if (Head == NULL)
	{
		printf("鏈表為空!\n");
		return false;
	}
	// 創(chuàng)建一個(gè)指針代替Head
	CircLList_t *phead = Head->next;
	// 新建一個(gè)結(jié)點(diǎn)
	CircLList_t *newNode = CircLList_NewNode(data);

	while (phead->next != Head)
	{
		phead = phead->next;
		if (phead->next == Head->next)
		{
			break;
		}
	}
	//  尾結(jié)點(diǎn)指向新結(jié)點(diǎn)
	phead->next = newNode;
	// 新結(jié)點(diǎn)指向首結(jié)點(diǎn)
	newNode->next = Head->next;
	return true;
}

// 指定位置插入(后插)
bool CircLList_DestInsert(CircLList_t *Head, DataType_t destval, DataType_t data)
{
	if (Head == NULL)
	{
		printf("鏈表為空!\n");
		return false;
	}
	// 創(chuàng)建一個(gè)指針代替Head
	CircLList_t *phead = Head;
	// 新建一個(gè)結(jié)點(diǎn)
	CircLList_t *newNode = CircLList_NewNode(data);
	while (phead)
	{
		// 找到目標(biāo)結(jié)點(diǎn)的上前結(jié)點(diǎn)
		if (phead->next->data == destval)
		{
			break;
		}
		phead = phead->next;
	}
	newNode->next = phead->next;
	phead->next = newNode;
}

// 頭刪
bool CircLList_HeadDel(CircLList_t *Head)
{
	// 對單向循環(huán)鏈表的首結(jié)點(diǎn)的地址進(jìn)行備份
	CircLList_t *Phead = Head->next;
	while (Phead->next != Head)
	{
		if (Phead->next == Head->next)
		{
			break;
		}
		Phead = Phead->next;
	}
	Phead->next = Head->next->next;
	Phead = Head->next;
	Head->next = Head->next->next;
	Phead->next = NULL;
	free(Phead);
	return true;
}

// 尾刪
bool CircLList_TailDel(CircLList_t *Head)
{
	// 對單向循環(huán)鏈表的首結(jié)點(diǎn)的地址進(jìn)行備份
	CircLList_t *phead = Head->next;
	// 找到尾結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn)
	while (phead->next->next != Head)
	{
		if (phead->next->next == Head->next)
		{
			break;
		}
		phead = phead->next;
	}
	phead->next->next = NULL;
	free(phead->next);
	phead->next = Head->next;

	return true;
}

// 指定數(shù)據(jù)的結(jié)點(diǎn)刪除(后刪)
bool CircLList_DestDes(CircLList_t *Head, DataType_t destval)
{
	// 對單向循環(huán)鏈表的首結(jié)點(diǎn)的地址進(jìn)行備份
	CircLList_t *phead = Head->next;
	// 前結(jié)點(diǎn)
	CircLList_t *preNode = Head;
	// 要?jiǎng)h除的結(jié)點(diǎn)
	CircLList_t *delNode = Head->next;
	while (phead->next != Head)
	{
		if (delNode->data == destval)
		{
			break;
		}
		preNode = delNode;
		delNode = delNode->next;
	}
	preNode->next = delNode->next;
	delNode->next = NULL;
	free(delNode);
	return true;
}
int main(int argc, char const *argv[])
{
	CircLList_t *Head = CircLList_Create();

	CircLList_HeadInsert(Head, 40);
	CircLList_HeadInsert(Head, 30);
	CircLList_HeadInsert(Head, 20);
	CircLList_HeadInsert(Head, 10);

	CircLList_TailInsert(Head, 50);
	CircLList_DestInsert(Head, 30, 15);
	CircLList_HeadDel(Head);
	CircLList_Print(Head);
	CircLList_TailDel(Head);
	CircLList_DestDes(Head, 20);
	CircLList_Print(Head);
	return 0;
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)的練習(xí)day2(未完待續(xù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)庫——DAY2(練習(xí)-添加元素進(jìn)表)

    數(shù)據(jù)庫——DAY2(練習(xí)-添加元素進(jìn)表)

    一、實(shí)驗(yàn)需求 創(chuàng)建一個(gè)英雄表(hero)并添加數(shù)據(jù) (數(shù)據(jù)從四大名著中選?。?主鍵 name nickname address groups email telphone 二、實(shí)驗(yàn)步驟 1、登錄MySQL 2、創(chuàng)建數(shù)據(jù)庫和表 (1)、創(chuàng)建英雄數(shù)據(jù)庫并進(jìn)入該數(shù)據(jù)庫 (2)、創(chuàng)建英雄表 group和groups不可用 更改為group_ 3、向表中添加數(shù)據(jù) 三、

    2024年02月01日
    瀏覽(37)
  • 【軟考中級-軟件設(shè)計(jì)師】day4:數(shù)據(jù)結(jié)構(gòu)-線性表、單鏈表、棧和隊(duì)列、串
  • 第14章_集合與數(shù)據(jù)結(jié)構(gòu)拓展練習(xí)(前序、中序、后序遍歷,線性結(jié)構(gòu),單向鏈表構(gòu)建,單向鏈表及其反轉(zhuǎn),字符串壓縮)

    第14章_集合與數(shù)據(jù)結(jié)構(gòu)拓展練習(xí)(前序、中序、后序遍歷,線性結(jié)構(gòu),單向鏈表構(gòu)建,單向鏈表及其反轉(zhuǎn),字符串壓縮)

    1、前序、中序、后序遍歷 分析: 完全二叉樹: 葉結(jié)點(diǎn)只能出現(xiàn)在最底層的兩層,且最底層葉結(jié)點(diǎn)均處于次底層葉結(jié)點(diǎn)的左側(cè) 2、線性結(jié)構(gòu) 3、其它 4、單向鏈表構(gòu)建 (1)定義一個(gè)單向鏈表SingleLinked類 包含私有的靜態(tài)內(nèi)部類Node 包含Object類型的data屬性和Node類型的next屬性 包含

    2024年01月23日
    瀏覽(22)
  • kafka大數(shù)據(jù)采集技術(shù)實(shí)驗(yàn)(未完待續(xù))

    kafka大數(shù)據(jù)采集技術(shù)實(shí)驗(yàn)(未完待續(xù))

    下載地址:https://link.zhihu.com/?target=https%3A//kafka.apache.org/downloads 解壓 啟動zookeeper 需要注意的是 : \\\" c o n f i g / z o o k e e p e r . p r o p e r t i e s \\\" 目錄和 \\\" / c o n f i g / z o o k e e p e r . p r o p e r t i e s \\\" 目錄是不同的 . 前者指當(dāng)前目錄中 c o n f i g 目錄下的 z o o k e e p e r . p r o p e r t

    2024年04月29日
    瀏覽(50)
  • C語言——數(shù)據(jù)在內(nèi)存中的存儲(未完待續(xù))

    C語言——數(shù)據(jù)在內(nèi)存中的存儲(未完待續(xù))

    無符號整形就是把有符號的取值范圍合并,就是無符號整形的取值范圍 數(shù)據(jù)類型 字節(jié)數(shù) 取值范圍 int 4 -2147483648~2147483647 short 2 -32768~32768 lomg 8 -2147483648~2147483647 long long 8 -9223372036854775808~9223372036854775807 char 1 -128~127 unsigned char 1 0~255 unsigned int 4 0~4294967295 unsigned shor 2 0~65535 unsigne

    2024年02月07日
    瀏覽(25)
  • 貪心算法練習(xí)day2

    貪心算法練習(xí)day2

    1)初始化最小字母為‘Z’,確保任何字母都能與之比較 2)遍歷單詞,找到當(dāng)前未刪除字母中的最小字母 3)獲取當(dāng)前位置的字母? current = word.charAt(i); 4)刪除最小字母之前的所有字母? word=word.substring(index+1); 5)? 將最小字母添加到結(jié)果字符,更新剩余可刪除字母數(shù)量 t -=

    2024年02月20日
    瀏覽(23)
  • Verilog(未完待續(xù))

    Verilog(未完待續(xù))

    Verilog教程 這個(gè)教程寫的很好,可以多看看。本篇還沒整理完。 什么是FPGA?一種可通過編程來修改其邏輯功能的數(shù)字集成電路(芯片) 與單片機(jī)的區(qū)別?對單片機(jī)編程并不改變其地電路的內(nèi)部結(jié)構(gòu),只是根據(jù)要求實(shí)現(xiàn)的功能來編寫運(yùn)行的程序(指令)。 舉例:單片機(jī)就兩個(gè)

    2024年03月19日
    瀏覽(17)
  • 機(jī)器學(xué)習(xí)基礎(chǔ)(粗學(xué))【未完待續(xù)】

    機(jī)器學(xué)習(xí)基礎(chǔ)(粗學(xué))【未完待續(xù)】

    卷積:用卷積求系統(tǒng)的存量??? 卷積,就是把輸出函數(shù)反轉(zhuǎn)一下。。。。(離譜) 實(shí)際不是從物理意義上理解的函數(shù)翻轉(zhuǎn),而是應(yīng)該從數(shù)學(xué)意義上,去理解卷積的意義。 在定義卷積時(shí)為什么要對其中一個(gè)函數(shù)進(jìn)行翻轉(zhuǎn)? - 中微子的回答 - 知乎 圖像的卷積操作:圖像元素與

    2024年02月04日
    瀏覽(91)
  • Vivado使用記錄(未完待續(xù))

    Vivado使用記錄(未完待續(xù))

    字體大小修改:Setting、Font Quick Start 組包含有 Create Project(創(chuàng)建工程)、 Open Project(打開工程)、 Open Example Project(打開實(shí)例工程)。 Tasks 組包含有 Manage IP(管理 IP)、 Open Hardware Manager(打開硬件管理器)、 Xilinx Tcl Store( Tcl 腳本存儲庫)。 Learning Center 組包含有 Documen

    2024年03月09日
    瀏覽(29)
  • TensorFlow學(xué)習(xí)筆記(未完待續(xù))

    TensorFlow學(xué)習(xí)筆記(未完待續(xù))

    TensorFlow中所有計(jì)算都會被轉(zhuǎn)化為計(jì)算圖上的節(jié)點(diǎn)。是一個(gè)通過計(jì)算圖的形式來表述計(jì)算的編程系統(tǒng),每個(gè)計(jì)算都是計(jì)算圖的一個(gè)節(jié)點(diǎn),而節(jié)點(diǎn)之間的邊描述了計(jì)算之間的依賴關(guān)系。 在TensorFlow中,系統(tǒng)會自動維護(hù)一個(gè)默認(rèn)的計(jì)算圖,通過tf.get_default_graph()函數(shù)可以獲取當(dāng)前

    2024年02月08日
    瀏覽(66)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包