C++实现单链表的增删改查

#include
using namespace std;

//声明结构体
typedef struct lnode{
	int data;
	lnode *nex;
}lnode,*LinkList;

//最开始插入数据(直接调用版)
LinkList TaiList(LinkList L){  //尾插
	lnode *new_node,*Tail = L;   //Tail=尾指针
	cout<<"链表结点数:";
	int data_x , data_y;
	cin>>data_x;
	while(data_x > 0){
	 cin>>data_y;
	 new_node = (LinkList)malloc(sizeof(lnode)); //创建新结点
	 new_node->data = data_y;
	 new_node->nex = NULL;
	 Tail->nex = new_node;    //插入
	 Tail = new_node;
	 data_x--;
	}
}

//增---插入数据(表头+数据版)
LinkList TailNode(LinkList L,int data){
	//1、创建新结点
	LinkList new_node = (LinkList)malloc(sizeof(lnode));
	new_node->data = data;
	new_node->nex = NULL;
	//2、找尾结点
	while(L->nex != NULL){
		L = L->nex;
	}
	//3、添加新结点至最后
	L->nex = new_node;	
}

//删除结点
LinkList DeleteNode(LinkList L,int data){
	LinkList p = L->nex;
	while((p != NULL)&&(p->data != data)){
		p = p->nex;
	}
	if(p != NULL){                     //结点存在删除
		LinkList p_1 = p->nex;
		p->data = p_1->data;
		p->nex = p_1->nex;
		free(p_1);
	}
	else
		cout<<"无此数据。"<nex;
	while((p != NULL)&&(p->data != data_y)){
		p = p->nex;
	}
	if(p != NULL){                     //结点存在删除
		p->data = data_g;	
	}
	else
		cout<<"无数据"<nex;
	int index = 1;
	while((p != NULL)&&(p->data != data)){
		p = p->nex;
		index++;
	}
	if(p != NULL)
		cout<<"数据 "<nex;
	L->nex = NULL;
	while(temp_2){
		temp_1 = temp_2;               //temp_1临时指针
		temp_2 = temp_2->nex;          //temp_2闷头向后
		temp_1->nex = L->nex;          //头插法
		L->nex = temp_1;
	}

}


//输出链表内容
void PrintList(LinkList L){
	LinkList p = L->nex;
	while(p != NULL){
		cout<< p->data <<"     ";
		p = p->nex;
	}
	cout<nex = NULL;
	//创建链表
	TaiList(L);    
	//输出
	PrintList(L);
	cout<>s;
	while(s != 0){
		if(s == 1){
			cout<<"插入数据:";
			int data;
			cin>>data;
			TailNode(L,data);
			cout<<"插入后链表为:";
			PrintList(L);
		}
		else if(s == 2){
			cout<<"删除数据:";
			int data;
			cin>>data;
			DeleteNode(L,data);
			cout<<"删除后链表为:";
			PrintList(L);
		}
		else if(s == 3){
			cout<<"更改数据:";
			int data_y,data_g;          //y原数据  g更改数据
			cin>>data_y;
			cout<<"更改数据为:";
			cin>>data_g;
			ChangeNode(L,data_y,data_g);
			cout<<"更改后链表为:";
			PrintList(L);
		}
		else if(s == 4){
			cout<<"查看数据:";
			int data;
			cin>>data;
			SearchNode(L,data);
		}
		else if(s == 5){
			Updown_List(L);
			cout<<"反转后链表为:";
			PrintList(L);
		}	
		cout<<"请输入操作:1、增加结点  2、删除结点  3、更改结点  4、查看结点  5、反转链表   结束请输入0"<>s;	
	}

	return 0;
}

你可能感兴趣的:(c++,算法,链表)