链表的插入删除查找

c++ 同时被 2 个专栏收录
16 篇文章 0 订阅
9 篇文章 0 订阅

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 ;
}
  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值