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

數(shù)據(jù)結(jié)構(gòu)---雙向鏈表的基本操作

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)---雙向鏈表的基本操作。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  1. 頭插法
  2. 遍歷鏈表
  3. 尾插法
  4. 頭刪法
  5. 尾刪法
  6. 按位置插入數(shù)據(jù)
  7. 按位置刪除數(shù)據(jù)

dooublelinklist.c


#include <stdio.h>
#include <stdlib.h>
#include "./doublelinklist.h"
 
doublelinklist* create_doublelinklist(void)
{
	doublelinklist* head = (doublelinklist*)malloc(sizeof(doublelinklist));	
	if(NULL == head)
	{
		printf("頭結(jié)點申請失敗!\n");
		return NULL;
	}
	head->text.len = 0;
	head->next = NULL;
	head->prev = NULL;
 
	return head;
}

//頭插法
int  insertHead_doublelinlist(doublelinklist *head,dataType num)
{
	//創(chuàng)建一個新結(jié)點
	doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));
	if(NULL == temp)
	{
		printf("創(chuàng)建失敗!\n");
		return 0;
	}
	temp->text.data = num;
	temp->next = NULL;
	temp->prev = NULL;

	if(NULL == temp)
	{
		printf("創(chuàng)建失敗!\n");
		return 0;
	}
	if(1 == isEmpty_doublelinlist(head))
	{
		temp->next = head->next;
		head->next = temp;
	}
	else
	{
		//頭插法插入數(shù)據(jù)

		temp->next = head->next; 
		head->next = temp;

		head->next->prev = temp;
		temp->prev = head;

	}
	return 0;
}
 
//遍歷鏈表
 
void show_doublelinklist(doublelinklist* head)
{
	doublelinklist *p = head;
	while(p->next != NULL)
	{
		p = p->next;
		printf("%d ",p->text.data);
	}
	printf("\n");
	//更新頭結(jié)點中記錄的鏈表長度
	head->text.len++;
 
	return;
}

//尾插法
int insertTail_doublelinlist(doublelinklist* head,dataType num)
{
	doublelinklist* temp = (doublelinklist*)malloc(sizeof(doublelinklist));
	if(NULL == temp)
	{
		printf("創(chuàng)建失敗!\n");
		return 0;
	}
	//初始化新結(jié)點
	temp->text.data = num;
	temp->next = NULL;
	temp->prev = NULL;

	doublelinklist* p = head;
	while(p->next != NULL)
	{
		p = p->next;
	}
	
	temp->prev = p;
	p->next = temp;
	


	head->text.len++;
	return 0;
}
//判空
int isEmpty_doublelinlist(doublelinklist* head)
{
	return head->next == NULL?1:0;
}

//按位置插入
void insert_location_doublelinlist(doublelinklist*head,dataType index,dataType num)
{
	if(index<1 || index >head->text.len+1)
	{
		printf("位置非法!");
		return;
	}
	int i;
	doublelinklist* temp=head;
	doublelinklist* p = (doublelinklist*)malloc(sizeof(doublelinklist));
	if(NULL == p)
	{
		printf("插入失敗!\n");
		return ;
	}
 
 
	//初始化新結(jié)點
	
	p->text.data = num;
	p->next = NULL;
	p->prev = NULL;
 
	for(i=0;i<index-1;i++)
	{
		temp = temp->next;
	}
	if(temp->next == NULL)
	{
		p->next = temp->next;
		temp->next = p;
		p->prev = temp;
	}else
	{
		p->next = temp->next;
		p->prev = temp;
		temp->next->prev = p;
		temp->next = p;
	}
	head->text.len++;

	return;

}
//頭刪
dataType delHead_doublelinlist(doublelinklist* head)
{
	if(isEmpty_doublelinlist(head))
	{
		printf("鏈表為空!");
		return (dataType)0;
	}

	doublelinklist* temp = head->next;
	head->next = head->next->next;
	temp->next->prev = head;

	dataType num = temp->text.data;
	free(temp);
	temp = NULL;

	head->text.len--;
	return num;
}

//尾刪
dataType delTail_doublelinlist(doublelinklist* head)
{
	if(isEmpty_doublelinlist(head))
	{
		printf("鏈表為空!");
		return (dataType)0;
	}
	doublelinklist* p = head;
	doublelinklist* temp;
	while(p->next != NULL)   //p->next->next != NULL
	{
		temp = p;
		p = p->next;
	}
	temp->next=temp->next->next;
	free(p);    //free(temp->next)
	p = NULL;   //temp->next = NULL

	head->text.len--;
	return 0;

}


//按位置刪除
void del_location_doublelinlist(doublelinklist* head,dataType index)
{
	if(isEmpty_doublelinlist(head))
	{
		printf("鏈表為空!");
		return;
	}
	doublelinklist* temp = head;

	for(int i=0;i<index-1;i++)
	{
		temp = temp->next;
	}
	doublelinklist* p = temp->next;
	temp->next = temp->next->next;
	p->prev->prev = temp;

	free(p);
	p = NULL;

	head->text.len--;
	return;

}




doublelinklist.h


#ifndef __DOUBLELINKLIDT_H__
#define __DOUBLELINKLIDT_H__
 
typedef int dataType;
 
union msg{
 
	dataType data;
	int len;
};
typedef struct node
{
	struct node* next;
	struct node* prev;
	union msg text; 
}doublelinklist;

doublelinklist* create_doublelinklist(void);
int  insertHead_doublelinlist(doublelinklist *head,dataType num);
void show_doublelinklist(doublelinklist* head);
int insertTail_doublelinlist(doublelinklist* head,dataType num);
int isEmpty_doublelinlist(doublelinklist* head);
void insert_location_doublelinlist(doublelinklist*head,dataType index,dataType num);
dataType delHead_doublelinlist(doublelinklist* head);
dataType delTail_doublelinlist(doublelinklist* head);
void del_location_doublelinlist(doublelinklist* head,dataType index);



#endif

doublemain.c文章來源地址http://www.zghlxwxcb.cn/news/detail-836817.html

#include <stdio.h>
#include "./doublelinklist.h"
int main(int argc, const char *argv[])
{
	doublelinklist* head =  create_doublelinklist();
	insertHead_doublelinlist(head,11);
	insertHead_doublelinlist(head,22);
	show_doublelinklist(head);

	insertTail_doublelinlist(head,33);
	insertTail_doublelinlist(head,44);
	show_doublelinklist(head);
	
	insert_location_doublelinlist(head,2,222);
	show_doublelinklist(head);
	
	delHead_doublelinlist(head);
	show_doublelinklist(head);

	delTail_doublelinlist(head);
	show_doublelinklist(head);

	del_location_doublelinlist(head,2);
	show_doublelinklist(head);



	return 0; 
}

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)---雙向鏈表的基本操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 四、數(shù)據(jù)結(jié)構(gòu)——單向鏈表的基本操作詳解:創(chuàng)建、插入(頭插法、尾插法、任意點插法)、刪除(頭刪法、尾刪法、任意位置刪法)、查詢(按值查下標(biāo)、按下標(biāo)查值)、遍歷鏈表和清空鏈表

    四、數(shù)據(jù)結(jié)構(gòu)——單向鏈表的基本操作詳解:創(chuàng)建、插入(頭插法、尾插法、任意點插法)、刪除(頭刪法、尾刪法、任意位置刪法)、查詢(按值查下標(biāo)、按下標(biāo)查值)、遍歷鏈表和清空鏈表

    ————后面附有全部代碼———— 數(shù)據(jù)結(jié)構(gòu)在計算機科學(xué)中扮演著重要角色,它用于組織和管理數(shù)據(jù),提高數(shù)據(jù)的操作和訪問效率。單向鏈表是一種簡單但非常重要的數(shù)據(jù)結(jié)構(gòu)。本文將深入探討單向鏈表的定義、特點、基本操作。 單向鏈表是一種線性數(shù)據(jù)結(jié)構(gòu),由一系列

    2024年01月17日
    瀏覽(90)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    【數(shù)據(jù)結(jié)構(gòu)】鏈表的分類和雙向鏈表

    本篇是基于上篇單鏈表所作,推薦與上篇配合閱讀,效果更加 http://t.csdnimg.cn/UhXEj 鏈表的結(jié)構(gòu)非常多樣,以下情況組合起來就有8種(2 x 2 x 2)鏈表結(jié)構(gòu): 我們一般叫這個頭為哨兵位 我們上回講的單鏈表就是不帶頭單項不循環(huán)鏈表。 今天我們要講帶頭雙向循環(huán)的鏈表。 不過

    2024年01月25日
    瀏覽(26)
  • 【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實現(xiàn)】

    【(數(shù)據(jù)結(jié)構(gòu))— 雙向鏈表的實現(xiàn)】

    注意: 這里的 “帶頭” 跟前面我們說的 “頭節(jié)點” 是兩個概念,實際前面的在單鏈表階段稱呼不嚴 謹,但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點。 帶頭鏈表里的頭節(jié)點,實際為 “哨兵位” ,哨兵位節(jié)點不存儲任何有效元素,只是站在這里“放哨 的” “哨

    2024年02月06日
    瀏覽(27)
  • 【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的實現(xiàn)

    我要扼住命運的咽喉,他卻不能使我完全屈服。? ? ? ? ? ? ? ? ? ? ? --貝多芬 目錄 一.帶頭循環(huán)的雙向鏈表的特點 二.不帶頭不循環(huán)單向鏈表和帶頭循環(huán)的雙向鏈表的對比 三.初始化鏈表,創(chuàng)建哨兵結(jié)點 四.雙向鏈表的各種功能的實現(xiàn) 1.雙向鏈表的尾插 2.雙向鏈表的打印?

    2023年04月10日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實現(xiàn)

    數(shù)據(jù)結(jié)構(gòu)——雙向鏈表的實現(xiàn)

    注意: 雙向鏈表又稱帶頭雙向循環(huán)鏈表 這?的“帶頭”跟前?我們說的“頭節(jié)點”是兩個概念,實際前?的在單鏈表階段稱呼不嚴 謹,但是為了同學(xué)們更好的理解就直接稱為單鏈表的頭節(jié)點。 帶頭鏈表?的頭節(jié)點,實際為“ 哨兵位 ”,哨兵位節(jié)點不存儲任何有效元素,只

    2024年02月06日
    瀏覽(26)
  • 探索數(shù)據(jù)結(jié)構(gòu):雙向鏈表的靈活優(yōu)勢

    探索數(shù)據(jù)結(jié)構(gòu):雙向鏈表的靈活優(yōu)勢

    ?? 歡迎大家來到貝蒂大講堂?? ????養(yǎng)成好習(xí)慣,先贊后看哦~???? 所屬專欄:數(shù)據(jù)結(jié)構(gòu)與算法 貝蒂的主頁:Betty’s blog 前面我們學(xué)習(xí)了單鏈表,它解決了順序表中插入刪除需要挪動大量數(shù)據(jù)的缺點。但同時也有仍需改進的地方,比如說:我們有時候需要尋找某個節(jié)點

    2024年03月16日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu):雙向鏈表的實現(xiàn)(C實現(xiàn))

    數(shù)據(jù)結(jié)構(gòu):雙向鏈表的實現(xiàn)(C實現(xiàn))

    個人主頁 : 個人主頁 個人專欄 : 《數(shù)據(jù)結(jié)構(gòu)》 《C語言》 本篇博客,將要實現(xiàn)的是 帶頭雙向循環(huán)鏈表 ,該結(jié)構(gòu)實現(xiàn)尾插,尾刪只需要O(1)的時間復(fù)雜度。 其結(jié)構(gòu)如下所示: 既然要實現(xiàn)的鏈表是雙向循環(huán)的,那么對于指針域,我們就需要 指向節(jié)點上一個的指針 和 指向節(jié)點

    2024年02月14日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】鏈表:帶頭雙向循環(huán)鏈表的增刪查改

    【數(shù)據(jù)結(jié)構(gòu)】鏈表:帶頭雙向循環(huán)鏈表的增刪查改

    本篇要分享的內(nèi)容是帶頭雙向鏈表,以下為本片目錄 目錄 一、鏈表的所有結(jié)構(gòu) 二、帶頭雙向鏈表 2.1尾部插入 2.2哨兵位的初始化 2.3頭部插入 2.4 打印鏈表 2.5尾部刪除 2.6頭部刪除 ?2.7查找結(jié)點 2.8任意位置插入 2.9任意位置刪除? 在剛開始接觸鏈表的時候,我們所學(xué)僅僅所學(xué)的

    2024年02月05日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】—帶頭雙向循環(huán)鏈表的實現(xiàn)(完美鏈表)

    【數(shù)據(jù)結(jié)構(gòu)】—帶頭雙向循環(huán)鏈表的實現(xiàn)(完美鏈表)

    鏈表結(jié)構(gòu)一共有八種形式,在前面的文章里已經(jīng)講完了不帶頭單向非循環(huán)鏈表的實現(xiàn),但是我們發(fā)現(xiàn)該鏈表實現(xiàn)尾插與尾刪時比較麻煩,要先從頭節(jié)點進行遍歷,找到尾節(jié)點,時間復(fù)雜度為O(N),而本次所講的帶頭雙向循環(huán)單鏈表,則可以直接找到尾節(jié)點。 雖然該鏈表看起來

    2024年01月25日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的增刪查改(C 代碼實現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)】雙向鏈表的增刪查改(C 代碼實現(xiàn))

    引入雙向鏈表:關(guān)于單鏈表的問題與討論 單鏈表存在的毛?。?因為單鏈表 只能單向 遍歷鏈表, 對于 前插 這個操作,單鏈表必 須得找到所需前插節(jié)點位置的前一個 ,那么這時就得 從頭指針重新遍歷一次 鏈表,會造成時間復(fù)雜度大大增加。 沒有頭節(jié)點(哨兵位)無法刪除

    2024年02月08日
    瀏覽(96)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包