真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

基于linux的C語言-創(chuàng)新互聯(lián)

數(shù)據(jù)結(jié)構(gòu)中的鏈?zhǔn)酱鎯?/p>

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比玉樹網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式玉樹網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋玉樹地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。

一,概念

程序中存儲多個數(shù)據(jù)時,數(shù)據(jù)與數(shù)據(jù)之間的存儲不?定是連續(xù)的,數(shù)據(jù)元素 的存儲位置可以是任意的,隨機(jī)的。不能像之前的順序存儲?樣,可以使? 地址來表?先后。鏈?zhǔn)酱鎯筒?,不能?地址的先后來表?。

鏈?zhǔn)酱鎯Γ捍鎯?數(shù)據(jù)+關(guān)系

數(shù)據(jù)元素:? ?

數(shù)據(jù)(前一個元素的地址)關(guān)系(后一個元素的地址)

? 即在存儲數(shù)據(jù)的同時也存儲數(shù)據(jù)的關(guān)系,用來表示數(shù)據(jù)間的先后關(guān)系。

二,單向列表

?概念: 在使用有先后關(guān)系的鏈?zhǔn)酱鎯r,在存儲關(guān)系時只存儲后一個元素的地址就能知道元素的值。

?????????????????????????鏈表元素(圖形表示):? ?

?????????????????????next(下一個元素的地址)

鏈表元素(代碼表示):

struct node

{

?????xxx data;

????? struct node * next;

};?

鏈表概念

1. 頭指針:是?個指針,存儲鏈表中第0個元素的地址(永遠(yuǎn)表?鏈表的 開始);便于說明鏈表的位置,?便后期找到鏈表

2. 節(jié)點(diǎn):鏈表中的?個元素就叫做?個節(jié)點(diǎn) 頭節(jié)點(diǎn):在鏈表中通常會加??個不存儲任何數(shù)據(jù)的空節(jié)點(diǎn),作為鏈表 的第0個元素,作?是之后?便操作鏈表。

鏈表的運(yùn)算

創(chuàng)建鏈表

? 執(zhí)行鏈表的運(yùn)算首先就得創(chuàng)建一個鏈表

//類型聲明
#include//類型聲明
struct node
{
	int data;
	struct node * next;
};

//創(chuàng)建一個鏈表
struct node * create()
{
	//創(chuàng)建一個空節(jié)點(diǎn),頭節(jié)點(diǎn)不存儲任何數(shù)據(jù)相當(dāng)于空節(jié)點(diǎn)
	struct node * p = malloc(sizeof(struct node));	//申請一個結(jié)構(gòu)體作為空節(jié)點(diǎn)。
	if(p == NULL)
	{
		printf("malloc error\n");
		return NULL;
	}
	//頭節(jié)點(diǎn)不存儲任何數(shù)據(jù),所以p->next是沒有數(shù)據(jù)的。
	p->next = NULL;
	return p;

}

? 1,?鏈表元素插?

? 要插入一個數(shù)據(jù)元素,就是把要插入位置的數(shù)據(jù)元素向后移動然后插入需要插入的數(shù)據(jù)元素。即先移位后插入

void insert(struct node * head,int pos,int data)	//head;頭指針,頭節(jié)點(diǎn)的地址
{

	
	struct node * p = head;//p也是頭節(jié)點(diǎn)的地址

	int i = 0;//當(dāng)前有0個
	
	//找到待插入的前一個元素的地址
	while(p->next != NULL && i< pos-1)//條件就是i == pos前一個   pos作為元素地址下標(biāo)
	{
		p = p->next;//p
		i++;
	}

	//p;就是要插入位置的前一個
	//創(chuàng)建新節(jié)點(diǎn)
	struct node * q = malloc(sizeof(struct node));
	q->data = data;

	//插入數(shù)據(jù)元素
	q->next = p->next;
	p->next = q;
}

//函數(shù)調(diào)用
int main()
{
struct node * head = create();

	insert(head,插入位置的地址下標(biāo),10);
}

? 2,?刪除元素

? 要刪除數(shù)據(jù)元素首先要確定數(shù)據(jù)元素是否為空。

//刪除數(shù)據(jù)元素
int empty(struct node * head)	//要刪除數(shù)據(jù)元素首先要判斷數(shù)據(jù)元素是否存在。
{
	if(head->next == NULL)
	{
		printf("is empty\n");	//如果數(shù)據(jù)元素不存在就返回為1
		return 1;
	}
	else
		return 0;	//如果數(shù)據(jù)元素存在就返回0
}
//執(zhí)行數(shù)據(jù)的刪除
void del(struct node * head,int data)	
{

	struct node * p = head;	//head和p都作為頭節(jié)點(diǎn)

	if( empty(head) )
	{
		return ;	//數(shù)據(jù)元素不為空就執(zhí)行操作
	}

	while(p->next != NULL)
	{
		if(p->next->data == data)	//找到要刪除的數(shù)據(jù)元素。
		{
			struct node * q = p->next;//q就是要刪除的數(shù)據(jù)元素的地址下標(biāo)
			p->next = q->next;
			printf("del is %d\n",q->data);
			free(q);	//申請的空間需要得到釋放
			break;
		}
		p = p->next;
	}

}

//函數(shù)調(diào)用
int main()
{
struct node * head = create();

	del(head,數(shù)據(jù)元素下標(biāo));
}

? 3,查找:

//判斷數(shù)據(jù)元素是否存在
int empty(struct node * head)	
{
	if(head->next == NULL)
	{
		printf("is empty\n");	//如果數(shù)據(jù)元素不存在就返回為1
		return 1;
	}
	else
		return 0;	//如果數(shù)據(jù)元素存在就返回0
}
//查找數(shù)據(jù)元素
void search(struct node * head,int data)
{
	
	if( empty(head) )	//首先也的判斷數(shù)據(jù)元素是否為空。
	{
		return ;	//數(shù)據(jù)元素不為空就執(zhí)行操作
	}
	struct node * p = head;

	while(p->next != NULL)
	{
		p = p->next;
		if( p->data == data )
		{
			printf("find data %d\n",data);
			return ;
		}
	}
}

//函數(shù)調(diào)用
int main()
{
struct node * head = create();

	search(head,需要查找的數(shù)據(jù)元素下標(biāo));
}

4,修改

? 需要修改一個數(shù)據(jù)元素首先就要找打這個數(shù)據(jù)元素。

//修改數(shù)據(jù)元素
void update(struct node * head,int src,int dest)
{

	struct node * p = head;

	while(p->next != NULL)	//要修改數(shù)據(jù)元素首先要找到這個數(shù)據(jù)元素然后再執(zhí)行操作。
	{
		p = p->next;
		if( p->data == src )
		{
			p->data = dest;	//找到數(shù)據(jù)元素執(zhí)行修改。
			printf("update ok\n");
			return ;
		}
	}

}
//函數(shù)調(diào)用
int main()
{
struct node * head = create();

	update(head,需要被修改的元素的地址下標(biāo),修改后的數(shù)據(jù)元素);
}

? 5,顯示所有的數(shù)據(jù)元素

//顯示所有的數(shù)據(jù)元素
void show(struct node * head)
{

	struct node * p = head;

	//struct node * p = head->next;   p != NULL
	while(p->next != NULL)	//當(dāng)數(shù)據(jù)元素為空就停止訪問
	{
		p = p->next;
		printf("%d ",p->data);
	}
	printf("\n");

}
//函數(shù)調(diào)用
int main()
{
struct node * head = create();

	show(head);
}

單向循環(huán)鏈表: 整個數(shù)據(jù)的最后一個元素不在是空(NULL)而是指向頭指針,存儲head。

即:P->NULL改為p->head.

? 雙向鏈表:數(shù)據(jù)的關(guān)系不再是只存儲后一個元素的地址,而是存儲前一個和后一個的地址。

數(shù)據(jù)元素(圖形說明):

數(shù)據(jù)關(guān)系 prior(前一個元素的地址)關(guān)系next(后一個元素的地址)

數(shù)據(jù)元素(代碼說明):

? struct? node

?????????????{

? xxx data;

? struct? *prior(前一個元素的地址)

? struct? *next(后一個元素的地址);

??????????????};

在創(chuàng)建鏈表時,只需要在單向列表的基礎(chǔ)上加上? p->prior==NULL即可。

在修改鏈表數(shù)據(jù)時:

q->prior = p;

? q->next = p->next;

p->next = q;

? q->next->prior = q;

在刪除鏈表數(shù)據(jù)元素時:

? q = p->next;

? p->next = q->next;

? q->next->prior = p;

? free(q);

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


文章名稱:基于linux的C語言-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://weahome.cn/article/piooi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部