考研408數(shù)據(jù)結(jié)構(gòu)代碼練習(xí)(C語(yǔ)言)——單鏈表部分-創(chuàng)新互聯(lián)

單鏈表:

根據(jù)開(kāi)發(fā)經(jīng)驗(yàn),一般對(duì)數(shù)據(jù)的操作也就是**增刪改查。**最多外加幾個(gè)初始化賦值函數(shù)。
所有的i都是從第0個(gè)開(kāi)始。這里的“改”沒(méi)有

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),赤坎企業(yè)網(wǎng)站建設(shè),赤坎品牌網(wǎng)站建設(shè),網(wǎng)站定制,赤坎網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,赤坎網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。首先是定義和初始化函數(shù)

這里定義了單鏈表結(jié)構(gòu)體;兩種初始化函數(shù)(帶頭結(jié)點(diǎn)和不帶頭結(jié)點(diǎn))。
初始化鏈表函數(shù)是為了防止內(nèi)存區(qū)域中存在臟數(shù)據(jù)。

#include#includetypedef struct LNode{int data; 
	struct LNode *next;
}LNode,*LinkList;

//零、初始化

bool InitList(LinkList &L){//帶頭
	L = NULL;
	return true;
}
bool InitListHead(LinkList &L){//不帶頭
	L = (LNode *) malloc(sizeof(LNode));//分配頭結(jié)點(diǎn)
	if(L == NULL)// 初始化失敗
		return false;
	L->next =NULL;// 頭結(jié)點(diǎn)后續(xù)初始化為空
	return true;
}
然后是插入節(jié)點(diǎn)的函數(shù)

一共是三種插入
1.帶頭結(jié)點(diǎn)的后繼插入
2.無(wú)頭節(jié)點(diǎn)后繼插入
3.前驅(qū)插入

bool ListInsertHead(LinkList &L,int i,int e){//(帶頭結(jié)點(diǎn))在第i個(gè)位置插入元素e
	if(i<1){printf ("插入失敗 \n");
		return false;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第幾個(gè)節(jié)點(diǎn)
	}
	if(p==NULL){//i值不合法
		printf ("插入失敗 \n");
		return false;
	}
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	printf ("插入成功,插入節(jié)點(diǎn)序號(hào)為%d,插入數(shù)據(jù)為%d\n",j,e);
	return true;
}


bool ListInsert(LinkList &L,int i,int e){//(無(wú)頭)在第i個(gè)位置插入元素e

	if(i<1){printf ("插入失敗 \n");
		return false;
	}
	if(i==1){//插入第一個(gè)節(jié)點(diǎn)
		LNode *s = (LNode *)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L = s; //頭指針指向新插入的第一個(gè)節(jié)點(diǎn)
		return true;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第幾個(gè)節(jié)點(diǎn)
	}
	if(p==NULL){//i值不合法
		printf ("i值不合法,插入失敗 \n");
		return false;
	}
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	printf ("插入成功 \n");
	return true;
}
bool InsertPriorNode(LNode *p,int e){//在p節(jié)點(diǎn)之前插入節(jié)點(diǎn)

	if(p==NULL){//選擇節(jié)點(diǎn)為空
		printf ("選擇節(jié)點(diǎn)為空,插入失敗 \n");
		return false;
	}
	LNode *s =(LNode *)malloc(sizeof(LNode));
	s->next = p->next;
	p->next = s;
	s->data = p->data;
	p->data = e;
	printf ("前插成功,插入數(shù)據(jù)為%d \n",e);
	return true;
}
刪除函數(shù)

1.刪除第i個(gè)位置的節(jié)點(diǎn)

int ListDelete(LinkList &L,int i,int &e){//刪除指定第i個(gè)節(jié)點(diǎn)
	if(i<1){printf ("i值有誤,刪除失敗 \n");
		return false;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第i-1個(gè)節(jié)點(diǎn)
	}
	if(p->next == NULL){e = p->data;
		free(p);
		printf ("刪除成功,刪除節(jié)點(diǎn)序號(hào)為%d,刪除數(shù)據(jù)為%d\n",++j,e);
	}
	if(p==NULL){//i值不合法
		printf ("刪除失敗 \n");
		return false;
	}
	LNode *s = p->next;
	e = s->data;
	p->next = s->next;
	free(s);
	printf ("刪除成功,刪除節(jié)點(diǎn)序號(hào)為%d,刪除數(shù)據(jù)為%d\n",++j,e);
	return e;
}

bool DeleteNode(LNode *p){if(p==NULL){//選擇節(jié)點(diǎn)為空
		printf ("選擇節(jié)點(diǎn)為空,插入失敗 \n");
		return false;
	}

	if(p->next == NULL){free(p);
		printf ("刪除成功\n");
	}
	LNode *q = p->next; //新建q指向待刪除節(jié)點(diǎn)p的后繼
	p->data = q->data;//p的后繼值付給p
	p->next = q->next;//p指向p的后繼
	free(q);//釋放q
	return true;
}
查找函數(shù)
int selectElem(LinkList &L,int data){//返回和data相等的位置i
    LinkList T=L;
    int i=0;
    while (T->next) {if (T->data == data) {return i;
        }
        T=T->next;
        if (T->data == data) {return ++i;
        }
        i++;
    }
    return 2333;
}
int selectAllHead(LinkList L){//遍歷
	if(L == NULL)
		return 2333;
    LinkList T=L;
    int i=0;
    while (T) {printf("第%d->%d\n",i,T->data);
        T=T->next;
		i++;
    }
	return 1;
}

改就是查到之后賦個(gè)值。

直接跑的全部代碼
#include#include#define max 10
typedef struct LNode{int data; 
	struct LNode *next;
}LNode,*LinkList;
void text (int &x ){x=100;
}
//零、初始化


bool InitList(LinkList &L){L = NULL;
	printf ("初始化成功 \n");
	return true;
}
bool InitListHead(LinkList &L){L = (LNode *) malloc(sizeof(LNode));//分配頭結(jié)點(diǎn)
	if(L == NULL){// 初始化失敗
		printf ("初始化失敗 \n");
		return false;
	}
	L->next =NULL;// 頭結(jié)點(diǎn)后續(xù)初始化為空
	printf ("初始化成功 \n");
	return true;
}





//一、增

bool ListInsertHead(LinkList &L,int i,int e){//(帶頭結(jié)點(diǎn))在第i個(gè)位置插入元素e

	if(i<1){printf ("插入失敗 \n");
		return false;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第幾個(gè)節(jié)點(diǎn)
	}
	if(p==NULL){//i值不合法
		printf ("插入失敗 \n");
		return false;
	}
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	printf ("插入成功,插入節(jié)點(diǎn)序號(hào)為%d,插入數(shù)據(jù)為%d\n",j,e);
	return true;
}


bool ListInsert(LinkList &L,int i,int e){//(無(wú)頭)在第i個(gè)位置插入元素e

	if(i<1){printf ("插入失敗 \n");
		return false;
	}
	if(i==1){//插入第一個(gè)節(jié)點(diǎn)
		LNode *s = (LNode *)malloc(sizeof(LNode));
		s->data = e;
		s->next = L;
		L = s; //頭指針指向新插入的第一個(gè)節(jié)點(diǎn)
		return true;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第幾個(gè)節(jié)點(diǎn)
	}
	if(p==NULL){//i值不合法
		printf ("i值不合法,插入失敗 \n");
		return false;
	}
	LNode *s = (LNode *)malloc(sizeof(LNode));
	s->data = e;
	s->next = p->next;
	p->next = s;
	printf ("插入成功 \n");
	return true;
}
bool InsertPriorNode(LNode *p,int e){//在p節(jié)點(diǎn)之前插入節(jié)點(diǎn)

	if(p==NULL){//選擇節(jié)點(diǎn)為空
		printf ("選擇節(jié)點(diǎn)為空,插入失敗 \n");
		return false;
	}
	LNode *s =(LNode *)malloc(sizeof(LNode));
	s->next = p->next;
	p->next = s;
	s->data = p->data;
	p->data = e;
	printf ("前插成功,插入數(shù)據(jù)為%d \n",e);
	return true;
}




//二、刪

int ListDelete(LinkList &L,int i,int &e){//刪除指定第i個(gè)節(jié)點(diǎn)
	if(i<1){printf ("i值有誤,刪除失敗 \n");
		return false;
	}
	LNode *p;
	int j=0;
	p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第i-1個(gè)節(jié)點(diǎn)
	}
	if(p->next == NULL){e = p->data;
		free(p);
		printf ("刪除成功,刪除節(jié)點(diǎn)序號(hào)為%d,刪除數(shù)據(jù)為%d\n",++j,e);
	}
	if(p==NULL){//i值不合法
		printf ("刪除失敗 \n");
		return false;
	}
	LNode *s = p->next;
	e = s->data;
	p->next = s->next;
	free(s);
	printf ("刪除成功,刪除節(jié)點(diǎn)序號(hào)為%d,刪除數(shù)據(jù)為%d\n",++j,e);
	return e;
}

bool DeleteNode(LNode *p){if(p==NULL){//選擇節(jié)點(diǎn)為空
		printf ("選擇節(jié)點(diǎn)為空,插入失敗 \n");
		return false;
	}

	if(p->next == NULL){free(p);
		printf ("刪除成功\n");
	}
	LNode *q = p->next; //新建q指向待刪除節(jié)點(diǎn)p的后繼
	p->data = q->data;//p的后繼值付給p
	p->next = q->next;//p指向p的后繼
	free(q);//釋放q
	return true;
}

//三、改
int UpdateElem(LinkList &L,int i,int e){//將第i個(gè)節(jié)點(diǎn)的數(shù)據(jù)改為e
    LinkList T=L;
	LNode *p;
    int j=0;
    p = L;//p指向頭節(jié)點(diǎn)
	while(p!=NULL && jp = p->next;
		j++;//當(dāng)前p指向第i-1個(gè)節(jié)點(diǎn)
	}
	if(p->next == NULL){printf ("更新失敗\n");
		return 2333;
	}
	p->next->data = e;
	printf ("更新成功\n");
    return 2333;
}

//四、查

int selectElem(LinkList &L,int data){//返回和data相等的位置i
    LinkList T=L;
    int i=0;
    while (T->next) {if (T->data == data) {return i;
        }
        T=T->next;
        if (T->data == data) {return ++i;
        }
        i++;
    }
    return 2333;
}
int selectAllHead(LinkList L){//遍歷
	if(L == NULL)
		return 2333;
    LinkList T=L;
    int i=0;
    while (T) {printf("第%d->%d\n",i,T->data);
        T=T->next;
		i++;
    }
	return 1;
}
int main()
{int i = 1;
	int e = 10; 
	int num[3] = {1,2,3};
	LinkList L;
	InitListHead(L);//帶頭結(jié)點(diǎn)初始化
	

	ListInsertHead(L,i,e);//插入第一個(gè)節(jié)點(diǎn)
	for(int j=0;j<3;j++){ListInsertHead(L,i+j+1,num[j]);//在i后面插入第j+1個(gè)節(jié)點(diǎn)
		
	}

	LNode *p=L->next->next;
	InsertPriorNode(p,e+1);//插入第2個(gè)位置,值為11

	LNode *q=L->next;
	InsertPriorNode(q,e+3);//選擇第一1結(jié)點(diǎn)前插



	
	selectAllHead(L);//遍歷鏈表
	int se = selectElem(L,3);//查找特定值
	printf ("%d\n",se);

	UpdateElem(L,3,se+100);
	selectAllHead(L);
	

	int ld = ListDelete(L,6,se);//刪除第6的節(jié)點(diǎn)
	printf ("被刪除值為%d\n",ld);
	selectAllHead(L);

	
   return 0;
}

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

當(dāng)前題目:考研408數(shù)據(jù)結(jié)構(gòu)代碼練習(xí)(C語(yǔ)言)——單鏈表部分-創(chuàng)新互聯(lián)
新聞來(lái)源:http://muchs.cn/article24/dcjdce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、標(biāo)簽優(yōu)化虛擬主機(jī)、移動(dòng)網(wǎng)站建設(shè)Google、云服務(wù)器

廣告

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

外貿(mào)網(wǎng)站建設(shè)