国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

靜態鏈表單向實現

2019-11-06 06:26:11
字體:
來源:轉載
供稿:網友

靜態鏈表的單向實現,初衷是為了模擬沒有指針的高級語言,用數組來代替指針來描述單向鏈表,所用方法為游標實現法

數組元素用兩個數據域組成,一個為數據值,一個為當前數據的后繼下標

----實現了單向鏈表的初始化創建 插入 刪除

----優點:改進了順序儲存結構中插入刪除需要大量移動數據的缺點

----缺點:1.連續分配空間 表長難以確定

                2.失去了順序結構儲存的快速讀取功能

總結:為了模擬 為了實現這種巧妙的構思 為了好玩

#include <stdio.h>#include <windows.h>#define MAX_LEN (502)
//不用指針的靜態鏈表 模擬高級語言使用typedef struct node{	int value;	int NextSet;}StaticList;void CreateStaticList(StaticList static_list[],int length_src,int init_num[],int length_put){	int count;	int NullEndSet;	if(static_list == NULL || length_src <= 0 || length_src > MAX_LEN ||init_num == NULL)return ;	memset( static_list,0,length_src*sizeof(StaticList) );	//初始化next指向	for(count = 1;count<length_src-2;count++)	{		static_list[count].NextSet = count+1;	}	static_list[count].NextSet = 0;	NullEndSet = count;	//初始化用戶賦值	for(count = 0;count<length_put;count++)	{		static_list[count+1].value = init_num[count];	}	static_list[count].NextSet = 0;//最后的元素向后鏈接位置為位置0	//初始化空位置頭和有數據位置頭	static_list[0].value = NullEndSet;//空數據尾位置	static_list[0].NextSet = count+1;//空數據頭位置	static_list[length_src-1].value = count;//數據數量	static_list[length_src-1].NextSet = count==0?-1:1;//有數據頭位置}
//插入//插入插入位置之前void InsertStaticNode(StaticList static_list[],int length_src,int insertnum,int insertindexset){	int NullSet;	int HeaderSet;	int DataCount;	int count;	int NewNextSet;	int NewLastSet;	if(static_list == NULL || length_src <= 0 || length_src+1 > MAX_LEN ||insertindexset <= 0 ||insertindexset >MAX_LEN)return ;		NullSet = static_list[0].NextSet;//空位置頭 也是 插入位置	HeaderSet = static_list[length_src-1].NextSet;	DataCount = static_list[length_src-1].value;	if(insertindexset >  DataCount)	{		PRintf("當前靜態鏈表長度為:%d/n請進行正確位置的添加,謝謝使用/n",DataCount);		return ;	}	static_list[NullSet].value = insertnum;//插入數據	static_list[0].NextSet = static_list[NullSet].NextSet;//更新空位置頭	NewLastSet = NewNextSet = HeaderSet;	for(count = 1;count<insertindexset;count++)	{		NewLastSet = NewNextSet;		NewNextSet = static_list[NewNextSet].NextSet;	}	static_list[NullSet].NextSet = NewNextSet;//向后鏈接	//向前鏈接	if(1 == insertindexset)	{		static_list[length_src-1].NextSet = NullSet;	}	else	{		static_list[NewLastSet].NextSet = NullSet;	}	static_list[length_src-1].value++;//更新已存在數據數量}//刪除void DeleteStaticNode(StaticList static_list[],int length_src,int deleteindexset){	int DataCount;	int HeaderSet;	int NullEndSet;	int count;	int DelLastSet;	int DelNode;	int DelNextNode;	if(static_list == NULL || length_src <= 0 || length_src > MAX_LEN ||deleteindexset <= 0 ||deleteindexset >MAX_LEN)return ;	DataCount = static_list[length_src-1].value;	if(deleteindexset > DataCount) 	{		printf("當前靜態鏈表長度為:%d/n請進行正確位置的刪除,謝謝使用/n",DataCount);		return ;	}	HeaderSet = static_list[length_src-1].NextSet;	NullEndSet = static_list[0].value;	if(deleteindexset == 1)//刪除頭	{		DelNode = HeaderSet;		static_list[length_src-1].NextSet = static_list[HeaderSet].NextSet;	}	else	{		DelNode = DelLastSet = HeaderSet;		for(count = 1;count<deleteindexset;count++)		{			DelLastSet = DelNode;			DelNode = static_list[DelNode].NextSet;		}		if(deleteindexset == DataCount)//刪除尾		{			static_list[DelLastSet].NextSet = 0;		}		else//刪除中間		{			DelNextNode = static_list[DelNode].NextSet;			static_list[DelLastSet].NextSet = DelNextNode;		}	}	static_list[DelNode].value = 0;//置零	static_list[DelNode].NextSet = 0;//置零	static_list[NullEndSet].NextSet = DelNode;//無數據元素尾添加	static_list[length_src-1].value--;//更新已存在數據數量}int main(){	int head;	StaticList static_list[102] = {0};	int putinarr[] = {3,4,5,7,8,3,3,4,8,56,78,6,2,45};	CreateStaticList(static_list,sizeof(static_list)/sizeof(static_list[0]),putinarr,sizeof(putinarr)/sizeof(putinarr[0]));	InsertStaticNode(static_list,sizeof(static_list)/sizeof(static_list[0]),123131,1);	DeleteStaticNode(static_list,sizeof(static_list)/sizeof(static_list[0]),15);	InsertStaticNode(static_list,sizeof(static_list)/sizeof(static_list[0]),999,14);	head = static_list[sizeof(static_list)/sizeof(static_list[0])-1].NextSet;	while(head)	{		printf("%d  ",static_list[head].value);		head = static_list[head].NextSet;	}	system("pause");	return 0;}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江华| 聊城市| 察雅县| 甘南县| 会同县| 双流县| 石河子市| 漾濞| 喜德县| 扬中市| 高要市| 蕉岭县| 扬州市| 双桥区| 贵阳市| 闽侯县| 铜陵市| 鹤壁市| 河源市| 定陶县| 嘉荫县| 万荣县| 定边县| 社旗县| 莫力| 扬中市| 岳阳市| 玛曲县| 岱山县| 武鸣县| 万盛区| 清新县| 南丹县| 龙游县| 南溪县| 长宁区| 张家港市| 夏邑县| 保康县| 阿克陶县| 张北县|