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

數(shù)據(jù)結構之鏈表

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

思維導圖

數(shù)據(jù)結構之鏈表,數(shù)據(jù)結構

練習

頭文件

#ifndef __HEAD_H__
#define __HEAD_H__



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
enum
{
	FALSE=-1,
	SUCCESS
};
typedef int datatype;
//定義節(jié)點結構體
//節(jié)點:數(shù)據(jù)域 指針域

typedef struct Node
{
	//數(shù)據(jù)域:存儲數(shù)據(jù)元素
	datatype data;
	//指針域:存儲指針
	struct Node *next;	
}*Linklist;


Linklist creat();
Linklist insert_head(Linklist head,datatype element);
void output(Linklist head);
Linklist insert_rear(Linklist head,datatype element);
Linklist delete_head(Linklist head);
Linklist delete_rear(Linklist head);
Linklist insert_pos(Linklist head,int pos,datatype element);
Linklist delete_pos(Linklist head,int pos);
Linklist change_pos(Linklist head,int pos,datatype element);
void search_pos(Linklist head,int pos);
int search_element(Linklist head,datatype element);
Linklist rev(Linklist head);
int search_transpos(Linklist head,int pos);
Linklist chang_element(Linklist head,datatype key,datatype element);
Linklist delete_element(Linklist head,datatype key);
void Bubble(Linklist head);
void Select(Linklist head);
Linklist free_space(Linklist head);



#endif

自定義函數(shù)

#include "head.h"
/*
 * function:    創(chuàng)建新節(jié)點
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist creat()
{
	Linklist s=(Linklist)malloc(sizeof(struct Node));
	if(NULL==s)
		return NULL;
	//成功則初始化
	s->data=0;
	s->next=NULL;
	return s;
}
/*
 * function:    頭插入
 * @param [ in] 
 * @param [out] 
 * @return    
 *       如果形參頭指針發(fā)生指向的改變,則必須返回
 */
Linklist insert_head(Linklist head,datatype element)
{
	//創(chuàng)建新節(jié)點s
	Linklist s=creat();
	s->data=element;
	//判斷鏈表是否為空
	if(head==NULL)
	{
		head=s;
	}
	else
	{
		s->next=head;
		head=s;
	}
	return head;
}



/*
 * function:    遍歷輸出
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void output(Linklist head)
{
	if(NULL==head)
		return;
	Linklist p=head;
	while(p!=NULL)//也可以是while(p)
	{
		printf("%-5d",p->data);
		p=p->next;
	}
	puts("");
}

/*
 * function:    尾插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */

Linklist insert_rear(Linklist head,datatype element)
{
	Linklist s=creat();
	s->data=element;
	Linklist p=head;
	if(NULL==head)
		head=s;
	else
	{
		while(p->next!=NULL)
		{
			p=p->next;
		}
		p->next=s;
	}
	return head;
}
/*
 * function:   頭刪
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist delete_head(Linklist head)
{
	if(head==NULL)
		return NULL;
	else
	{
		Linklist del=head;
		head=head->next;
		free(del);	
		del=NULL;
	}
	return head;
}
/*
 * function:    尾刪
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist delete_rear(Linklist head)
{
	if(head==NULL)
		return NULL;
	else if(head->next==NULL)
	{
		free(head);
		head==NULL;
		return head;
	}
	else
	{
		Linklist del=head;
		while(del->next->next!=NULL)
		{
			del=del->next;
		}
		free(del->next);
		del->next=NULL;
	}
	return head;
}
/*
 * function:    計算鏈表長度
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int length(Linklist head)
{
	int len=0;
	while(head!=NULL)
	{
		head=head->next;
		len++;
	}
	return len;
}


/*
 * function:    按任意位置插入
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist insert_pos(Linklist head,int pos,datatype element)
{
	if(pos<0||pos>length(head)+1)
		return head;
	Linklist s=creat();
	s->data=element;
	if(pos==1)
	{
		head=insert_head(head,element);
		return head;
	}
	Linklist p=head;
	for(int i=1;i<pos-1;i++)	
	{
		p=p->next;	
	}		
	s->next=p->next;	
	p->next=s;	
	return head;
}
/*
 * function:    按任意位置刪除
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist delete_pos(Linklist head,int pos)
{
	if(pos<0||pos>length(head)+1)
		return head;
	if(pos==1)
	{
		head=delete_head(head);
		return head;
	}
	Linklist p=head;
	for(int i=1;i<pos-1;i++)	
	{
		p=p->next;	
	}		
	Linklist s=p->next;	
	p->next=s->next;
	free(s);
	s=NULL;
	return head;
}
/*
 * function:    按任意位置修改
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist change_pos(Linklist head,int pos,datatype element)
{
	if(pos<0||pos>length(head)+1)
		return head;
	if(pos==1)
	{
		head->data=element;
		return head;
	}
	Linklist p=head;
	for(int i=1;i<pos;i++)	
	{
		p=p->next;	
	}		
	p->data=element;
	return head;
}
/*
 * function:    按任意位置查找
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void search_pos(Linklist head,int pos)
{	
	if(pos<0||pos>length(head))
		return;
	if(head==NULL)
		return;
	Linklist p=head;
	for(int i=1;i<pos;i++)
	{
		p=p->next;
	}
	printf("%d\n",p->data);
}


/*
 * function:    按任意元素查找
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int  search_element(Linklist head,datatype element)
{
	if(head==NULL)
		return FALSE;
	Linklist p=head;
	int pos=0;
	while(p)
	{
		pos++;
		if(p->data==element)
		{
			return pos;
		}
		p=p->next;
	}
	if(pos==0)
		return FALSE;
}
/*
 * function:    逆置鏈表
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist rev(Linklist head)
{
	if(head==NULL)
		return head;
	Linklist p=head->next;
	head->next=NULL;
	Linklist t=p;
	while(p)
	{
		t=p;
		p=p->next;
		t->next=head;
		head=t;
	}
	return head;
}


/*
 * function:    查找倒數(shù)第n個值
 * @param [ in] 
 * @param [out] 
 * @return      
 */
int search_transpos(Linklist head,int pos)
{
	if(head==NULL)
		return FALSE;
	if(pos<0||pos>length(head))
		return FALSE;
	Linklist p=head;
	Linklist q=head;
	for(int i=0;i<pos;i++)
	{
		p=p->next;
	}
	while(p)
	{
		p=p->next;
		q=q->next;
	}
	return q->data;
}
/*
 * function:    按任意元素修改
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist chang_element(Linklist head,datatype key,datatype element)
{
	if(head==NULL)
		return NULL;
	int pos=search_element(head,key);
	head=change_pos(head,pos,element);
	return head;
}

/*
 * function:    按任意元素刪除
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist delete_element(Linklist head,datatype key)
{
	if(head==NULL)
		return NULL;
	int pos=search_element(head,key);
	head=delete_pos(head,pos);
	return head;
}
/*
 * function:    冒泡排序(從小到大)
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Bubble(Linklist head)
{
	if(head==NULL)
		return;

	for(int i=0;i<length(head)-1;i++)
	{
		Linklist p=head;
		for(int j=0;j<length(head)-i-1;j++)
		{
			if(p->data >p->next->data)
			{
				datatype temp=p->data;
				p->data=p->next->data;
				p->next->data=temp;
			}
			p=p->next;
		}
	}
}

/*
 * function:    簡單選擇排序(從大到小)
 * @param [ in] 
 * @param [out] 
 * @return      
 */
void Select(Linklist head)
{
	if(head==NULL)
		return;
	Linklist p=head;
	for(int i=0;i<length(head)-1;i++)
	{
		datatype max=p->data;
		Linklist q=p->next;
		for(int j=i+1;j<length(head);j++)
		{
			if(p->data<q->data)
			{
				max=q->data;
			}
			q=q->next;
		}
		chang_element(head,max,p->data);
		p->data=max;
		p=p->next;
	}
}
/*
 * function:    釋放空間
 * @param [ in] 
 * @param [out] 
 * @return      
 */
Linklist free_space(Linklist head)
{
	if(head==NULL)
		return NULL;
	for(int i=0;i<length(head);i++)
	{
		Linklist s=head;
		head=head->next;
		free(s);
		s=NULL;
	}
	return head;
}

主函數(shù)

#include "head.h"
int main(int argc, const char *argv[])
{
	//定義單鏈表的頭指針
	Linklist head=NULL;
	int n;
	//插入的值
	datatype element;
	
	printf("請輸入鏈表長度\n");
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		printf("請輸入第%d個值:",i+1);
		scanf("%d",&element);
		//head=insert_head(head,element);
		head=insert_rear(head,element);
	}
//	head=delete_head(head);
//	head=delete_rear(head);
// 按位置插入
	int pos;
/*
	printf("請輸入要插入的位置");
	scanf("%d",&pos);
	printf("請輸入要插入的值");
	scanf("%d",&element);
	head=insert_pos(head,pos,element);
	output(head);
	printf("請輸入要刪除的位置");
	scanf("%d",&pos);
	head=delete_pos(head,pos);
	output(head);
*/
/*
	printf("請輸入要修改的位置");
	scanf("%d",&pos);
	printf("請輸入要修改后的值");
	scanf("%d",&element);
	head=change_pos(head,pos,element);
	output(head);
	printf("請輸入要查找的位置");
	scanf("%d",&pos);
	search_pos(head,pos);
*/
	printf("請輸入要查找的值");
	scanf("%d",&element);
	pos=search_element(head,element);
	printf("%d\n",pos);
//	head=rev(head);
	output(head);

/*	printf("請輸入要查找倒數(shù)第幾個");
	scanf("%d",&pos);
	int num=search_transpos(head,pos);
	printf("倒數(shù)第%d個的值為:%d\n",pos,num);
*/
	int key;

	printf("請輸入要修改的值");
	scanf("%d",&key);
	printf("請輸入修改后的值");
	scanf("%d",&element);
	head=chang_element(head,key,element);
	output(head);
	printf("請輸入要刪除的值");
	scanf("%d",&element);
	head=delete_element(head,element);
	output(head);

	Bubble(head);
	output(head);
	Select(head);
	output(head);
	free_space(head);
	return 0;
}

效果圖

?數(shù)據(jù)結構之鏈表,數(shù)據(jù)結構文章來源地址http://www.zghlxwxcb.cn/news/detail-822479.html

到了這里,關于數(shù)據(jù)結構之鏈表的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • C++數(shù)據(jù)結構之鏈表(詳解)

    C++數(shù)據(jù)結構之鏈表(詳解)

    主要參考文章地址 01.鏈表基礎知識 | 算法通關手冊 (itcharge.cn)) 本次內容是對鏈表的總結,可以看了上面的文章之后。 在看我下面的內容,做一個簡短的復習,且本內容的代碼均用C++實現(xiàn),而參考資料的代碼則為python。 每一個標題都有一個完整的鏈接,也可以點擊下面的鏈

    2024年02月15日
    瀏覽(58)
  • C語言進階——數(shù)據(jù)結構之鏈表(續(xù))

    C語言進階——數(shù)據(jù)結構之鏈表(續(xù))

    hello,大家好呀,我是Humble,本篇博客承接之前的 C語言進階——數(shù)據(jù)結構之鏈表 的內容 (沒看過的小伙伴可以從我創(chuàng)建的專欄C語言進階之數(shù)據(jù)結構 找到那篇文章并閱讀后在回來哦~) ,上次我們重點說了鏈表中的 單鏈表 ,即 不帶頭單向不循環(huán)鏈表 還說到了鏈表的分類雖

    2024年01月25日
    瀏覽(22)
  • 數(shù)據(jù)結構之鏈表練習與習題詳細解析

    數(shù)據(jù)結構之鏈表練習與習題詳細解析

    個人主頁:點我進入主頁 專欄分類:C語言初階? ? ??C語言程序設計————KTV? ? ? ?C語言小游戲? ? ?C語言進階 C語言刷題? ? ? ?數(shù)據(jù)結構初階 歡迎大家點贊,評論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言 2.習題解析 2.1習題一 2.2習題二 2.3習題三 2.4習題四 2.

    2024年02月05日
    瀏覽(29)
  • 【023】C/C++數(shù)據(jù)結構之鏈表及其實戰(zhàn)應用

    【023】C/C++數(shù)據(jù)結構之鏈表及其實戰(zhàn)應用

    ?? 作者簡介:專注于C/C++高性能程序設計和開發(fā),理論與代碼實踐結合,讓世界沒有難學的技術。包括C/C++、Linux、MySQL、Redis、TCP/IP、協(xié)程、網(wǎng)絡編程等。 ?? ??? CSDN實力新星,社區(qū)專家博主 ?? ?? 專欄介紹:從零到c++精通的學習之路。內容包括C++基礎編程、中級編程、

    2024年02月08日
    瀏覽(27)
  • C/C++數(shù)據(jù)結構之鏈表題目答案與解析

    C/C++數(shù)據(jù)結構之鏈表題目答案與解析

    個人主頁:點我進入主頁 專欄分類:C語言初階? ? ??C語言程序設計————KTV? ? ? ?C語言小游戲? ? ?C語言進階 C語言刷題? ? ? ?數(shù)據(jù)結構初階 歡迎大家點贊,評論,收藏。 一起努力,一起奔赴大廠。 目錄 1.前言? 2.題目解析 2.1?移除鏈表元素 2.2反轉鏈表 2.3鏈表的中

    2024年02月05日
    瀏覽(23)
  • 數(shù)據(jù)結構之鏈表 - 超詳細的教程,手把手教你認識并運用鏈表

    數(shù)據(jù)結構之鏈表 - 超詳細的教程,手把手教你認識并運用鏈表

    順序表只適合靜態(tài)的查找和更新,不適合插入和刪除元素, 因為在ArrayList中插入和刪除元素時,由于需要將后序元素往前后者往后移動,所以時間復雜度會相當高,能達到O(N)。 為了解決這一問題,java 引入了 LinkedList(鏈表)。 鏈表是一種 邏輯上連續(xù),物理上不連續(xù) 的存儲結

    2024年02月09日
    瀏覽(91)
  • 數(shù)據(jù)結構-鏈表結構-雙向鏈表

    數(shù)據(jù)結構-鏈表結構-雙向鏈表

    雙向鏈表也叫雙鏈表,與單向鏈表不同的是,每一個節(jié)點有三個區(qū)域組成:兩個指針域,一個數(shù)據(jù)域 前一個指針域:存儲前驅節(jié)點的內存地址 后一個指針域:存儲后繼節(jié)點的內存地址 數(shù)據(jù)域:存儲節(jié)點數(shù)據(jù) 以下就是雙向鏈表的最基本單位 節(jié)點的前指針域指向前驅,后指針

    2024年02月04日
    瀏覽(31)
  • <數(shù)據(jù)結構> 鏈表 - 鏈表的概念及結構

    <數(shù)據(jù)結構> 鏈表 - 鏈表的概念及結構

    概念: 鏈表是一種物理存儲結構上非連續(xù)、非順序的存儲結構,數(shù)據(jù)元素的 邏輯順序 是通過鏈表中的 指針鏈接 次序實現(xiàn)的 1、鏈表由一系列結點(鏈表中每一個元素稱為結點)組成。 2、結點可以在運行時動態(tài)(malloc)生成。 3、每個結點包括兩個部分:一個是存儲數(shù)據(jù)元素的

    2023年04月09日
    瀏覽(52)
  • 【數(shù)據(jù)結構-鏈表-01】反轉鏈表

    【數(shù)據(jù)結構-鏈表-01】反轉鏈表

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續(xù)學習,不斷總結,共同進步,活到老學到老 導航 檀越劍指大廠系列:全面總

    2024年02月10日
    瀏覽(28)
  • 數(shù)據(jù)結構——線性數(shù)據(jù)結構(數(shù)組,鏈表,棧,隊列)

    數(shù)據(jù)結構——線性數(shù)據(jù)結構(數(shù)組,鏈表,棧,隊列)

    數(shù)組(Array) 是一種很常見的數(shù)據(jù)結構。它由相同類型的元素(element)組成,并且是使用一塊連續(xù)的內存來存儲。 我們直接可以利用元素的索引(index)可以計算出該元素對應的存儲地址。 數(shù)組的特點是: 提供隨機訪問 并且容量有限。 2.1. 鏈表簡介 鏈表(LinkedList) 雖然是

    2024年02月11日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包