天天看點

連結清單的插入删除查找

1.建立一個單連結清單,按順序輸入5個整數并列印輸出。

2.插入一個元素,通過鍵盤輸入插入位置和資料,列印輸出。

3.删除一個元素,從鍵盤讀取删除元素位置,列印輸出

4.查找一個資料,找到了,删除它,找不到在連結清單末尾加上他

連結清單的插入删除查找

在位置2後面加入了一個3然後又把它删除

在連結清單中查找8,沒有找到,添加到末尾

程式如下:

#include <iostream>
#include <string>

using namespace std;

int search_data;
struct listPoint 
{
	listPoint *next;
	listPoint *last;
	int data;

};


listPoint * Creat_Normal_list(int n)          //建立連結清單
{
	listPoint *head,*end,*normal;
	head = (listPoint*)malloc(sizeof(listPoint));
	end = head;
	for (int i = 0; i < n; i++)
	{
		normal = (listPoint*)malloc(sizeof(listPoint));
		cout<<"請輸入資料:  ";
		cin>>normal->data;
		end->next = normal;
		normal->last = end;
		end = normal;
	}
	end->next = NULL;
	head->last = NULL;

	return head;

}

void add_one_Point(listPoint *list_0)  //添加資料
{
	int data ,n;
	cout<<"請輸入插入位置";
	cin >> n;
	cout<<"請輸入插入資料";
	cin >>data;
	listPoint *list=list_0;
	listPoint *normal;
	normal = (listPoint*)malloc(sizeof(listPoint));

		for (int i = 0; i < n; i++)
	{
		if(list->next!=NULL) list  = list->next ;
	}
		normal->data = data;
		normal->next = list->next;
		list -> next ->last = normal;
		list -> next = normal;
		normal-> last = list;
}

void add_oneLast_Point(listPoint *list_0,int n) //連結清單末尾添加資料
{
	listPoint *list=list_0;
	listPoint *normal;
	normal = (listPoint*)malloc(sizeof(listPoint));

		for (int i = 0; i < 5; i++)
	{
		if(list->next!=NULL) list  = list->next ;
	}
		normal->data = search_data;
		normal->last = list;
		normal->next = NULL;
		list -> next = normal;
}

void delete_one_Point(listPoint *list_0)  //删除運作中輸入位置資料
{
	int n;
	cout<<"請輸入删除位置";
	cin >> n;
	listPoint *list = list_0;
	for (int i = 0; i < n; i++){ 
   
	    if(list->next!=NULL) list  = list->next ;
	}

	list->next->last = list->last;
	list->last->next = list->next;
	free(list);

}
void delete_one_Point(listPoint *list_0,int n) //删除第n位置的資料
{
	listPoint *list = list_0;
	for (int i = 0; i < n; i++){ 
   
	    if(list->next!=NULL) list  = list->next ;
	}

	list->next->last = list->last;
	list->last->next = list->next;
	free(list);

}

listPoint* listn( listPoint* l1,int n)  //用于查找固定下表n資料,未使用,以後擴充功能用
{
	listPoint*l2=l1;
	for (int i = 1; i <= n; i++)
	{
		if (l2->next!=NULL)
		{
			l2 = l2->next;
			
		}
	}
	return l2;
}

void printInfo(listPoint* list1)   //用于列印輸出資料
{
	listPoint *list = list1;
	cout<<"連結清單資料為:"<<endl;
	for (int i = 1; i <= 6; i++)
	{
		if (list->next!=NULL){
			list = list->next;
		cout<<list->data<<endl;
		}
		
	}
}

int search_Point(listPoint* list1)   //搜尋資料 如果未找到傳回0;如果找到了傳回所在位置
{
	listPoint* list = list1;
	cout<<"請輸入查找的資料";
	cin >> search_data;
	for (int i = 1; i <= 5; i++){
		list = list->next;
		if(list->data == search_data)return i;
	}
	return 0;
}

int main()
{
	listPoint *list;
	list = Creat_Normal_list(5);
	printInfo(list);
	add_one_Point(list);
	printInfo(list);
	delete_one_Point(list);
	printInfo(list);
	int Pos = search_Point(list);
	if (Pos == 0){
		add_oneLast_Point(list,5);
		printInfo(list);
	}
	else{
	
	    delete_one_Point(list,Pos);
	     printInfo(list);

	}
	
	system("pause");
	return 0 ;
}
           

繼續閱讀