欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法

對單鏈表進(jìn)行遍歷、查找、插入、刪除等操作,最終效果如下:

創(chuàng)新互聯(lián)建站網(wǎng)絡(luò)公司擁有10多年的成都網(wǎng)站開發(fā)建設(shè)經(jīng)驗(yàn),上千家客戶的共同信賴。提供成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站開發(fā)、網(wǎng)站定制、友情鏈接、建網(wǎng)站、網(wǎng)站搭建、響應(yīng)式網(wǎng)站、網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格,提供周到的售前咨詢和貼心的售后服務(wù)

線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法

相關(guān)C代碼如下:

/*線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法*/

#include?<stdio.h>
#include?<stdlib.h>
#include?<malloc.h>

/*定義變量*/
typedef?int?DataType;

typedef?struct?node{?????//定義鏈表結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)
	DataType?data;
	struct?node?*?pNext;
}NODE;

typedef?NODE?*?pNODE;???//定義鏈表結(jié)點(diǎn)類型指針

/*函數(shù)聲明*/
pNODE?createLinkList(void);???//尾插法建立單鏈表
void?TraverseLinkList(pNODE?pHead);?//遍歷單鏈表各個(gè)結(jié)點(diǎn)
pNODE?LocateNode(pNODE?pHead,int?k);?//查找鏈表中是否存在某個(gè)結(jié)點(diǎn)
void?InsertLinkList(pNODE?pHead,int?i,DataType?x);??//向鏈表中插入結(jié)點(diǎn)
DataType?DeleteLinkList(pNODE?pHead,int?i);

/*程序正文*/

int?main(void){????????????//主函數(shù)
	pNODE?pHead=NULL;??????//

	pHead?=?createLinkList();??//創(chuàng)建鏈表,并將頭結(jié)點(diǎn)地址返回
	TraverseLinkList(pHead);??//將頭結(jié)點(diǎn)地址傳入遍歷函數(shù),遍歷鏈表各個(gè)結(jié)點(diǎn)
	pNODE?lNode?=?LocateNode(pHead,7);?//在鏈表中查找指定的值
	if(lNode?==?NULL){
		printf("鏈表中不存在你要查找的值\n");
	}else{
		printf("鏈表中存在你要查找的值\n");
	}
	printf("向鏈表中第三個(gè)位置插入100\n");
	InsertLinkList(pHead,3,100);
	TraverseLinkList(pHead);?
	printf("刪除鏈表中第四個(gè)結(jié)點(diǎn),刪除的結(jié)點(diǎn)值是%d\n",DeleteLinkList(pHead,4));
	TraverseLinkList(pHead);?

	return?0;
}

pNODE?createLinkList(void){

	pNODE?pHead,pTail;????//定義頭結(jié)點(diǎn)指針和尾結(jié)點(diǎn)指針
	int?length,i,val;
	pHead=(pNODE)malloc(sizeof(NODE));??//給頭結(jié)點(diǎn)在內(nèi)存中申請地址空間
	pTail=pHead;???//初始狀態(tài)頭指針和尾指針相同
	
	if(pHead?==?NULL){??????//如果頭結(jié)點(diǎn)申請失敗就退出程序
		printf("內(nèi)存分配頭結(jié)點(diǎn)失敗.");
		exit(-1);
	}
	printf("請輸入鏈表的結(jié)點(diǎn)個(gè)數(shù):");
	scanf("%d",&length);
	for(i=0;i<length;i++){???//手動(dòng)依次輸入新建鏈表需要的結(jié)點(diǎn)值
		printf("請輸入結(jié)點(diǎn)%d的值:",i+1);?
		scanf("%d",&val);
		pNODE?pNew=(pNODE)malloc(sizeof(NODE));??//給新結(jié)點(diǎn)在內(nèi)存中申請地址空間
		if(pNew?==?NULL){???//如果新結(jié)點(diǎn)地址分配地址空間失敗,就退出程序
			printf("坑爹啊,沒有足夠的內(nèi)存分配了");
			exit(-1);
		}
		pNew->data=val;???//給新結(jié)點(diǎn)賦值
		pTail->pNext=pNew;??//新結(jié)點(diǎn)連接到尾結(jié)點(diǎn)之后
		pTail=pNew;??//尾指針指向新結(jié)點(diǎn)
	}
	pTail->pNext=NULL;	//終端結(jié)點(diǎn)指針域置為空,單鏈表生成
	return?pHead;	//返回鏈表頭結(jié)點(diǎn)
}

void?TraverseLinkList(pNODE?pHead){
	printf("當(dāng)前鏈表各個(gè)結(jié)點(diǎn)的值是:");
	pNODE?pNew?=?pHead->pNext;??//獲取首結(jié)點(diǎn),然后從首結(jié)點(diǎn)開始進(jìn)行遍歷
	while(pNew?!=?NULL){??????//判斷下一個(gè)結(jié)點(diǎn)是否為空,如果不為空,那么就輸出結(jié)點(diǎn)數(shù)據(jù)域里的值
		printf("%d?",pNew->data);
		pNew?=?pNew->pNext;
	}
	printf("\n");
}

pNODE?LocateNode(pNODE?pHead,int?k){??//查看鏈表中是否存在某個(gè)值的結(jié)點(diǎn)
	pNODE?pNew?=?pHead->pNext;
	while(pNew?&&?pNew->data!=k){
		pNew=pNew->pNext;		
	}
	return?pNew;
}

void?InsertLinkList(pNODE?pHead,int?i,DataType?x){???//向鏈表第i個(gè)位置插入結(jié)點(diǎn)x
	pNODE?p,s;int?j;
	p=pHead;j=0;
	while(p?!=?NULL?&&?j<i-1){
		p?=?p->pNext;???//是p指向第i-1個(gè)結(jié)點(diǎn),即是指向要插入位置的前一個(gè)結(jié)點(diǎn)
		j++;
	}
	if(p?==?NULL){???????
		printf("插入位置錯(cuò)誤");
		exit(-1);
	}
	s?=?(pNODE)malloc(sizeof(NODE));??//給新結(jié)點(diǎn)申請內(nèi)存空間
	s->data=x;						//給新結(jié)點(diǎn)數(shù)據(jù)域賦值
	s->pNext=p->pNext;??????????????//將新結(jié)點(diǎn)指向p指針?biāo)赶虻慕Y(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)
	p->pNext=s;?????????????????????//將s結(jié)點(diǎn)的地址賦值給p結(jié)點(diǎn)所指向結(jié)點(diǎn)的指針域,即讓i-1位置的結(jié)點(diǎn)指向s結(jié)點(diǎn)
}


DataType?DeleteLinkList(pNODE?pHead,int?i){
	pNODE?p,s;int?j;
	DataType?x;
	p=pHead;j=0;
	while(p?!=?NULL?&&?j<i-1){
		p=p->pNext;????//是p指向第i-1個(gè)結(jié)點(diǎn),即是指向要插入位置的前一個(gè)結(jié)點(diǎn)
		j++;
	}

	if(p?==NULL){
		printf("刪除位置錯(cuò)誤");
		exit(-1);
	}
	s?=?p->pNext;???????????//s結(jié)點(diǎn)就是要被刪除的結(jié)點(diǎn)
	p->pNext=p->pNext->pNext;??//s前一個(gè)結(jié)點(diǎn)跳過s結(jié)點(diǎn)直接指向s的下一個(gè)結(jié)點(diǎn),此時(shí)s結(jié)點(diǎn)成了幽靈了
	x?=?s->data;??//將s結(jié)點(diǎn)的值保存下來
	free(s);??//在內(nèi)存空間中將s釋放掉
	return?x;???
}

分享文章:線性表的鏈?zhǔn)酱鎯?chǔ)之單鏈表的尾插法
標(biāo)題鏈接:http://www.chinadenli.net/article46/joiihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站建站公司App開發(fā)全網(wǎng)營銷推廣商城網(wǎng)站微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司