仅供参考!

代码:

		#include <iostream>
		#include <stdlib.h>
		#include <conio.h>
		#define TURE 1
		#define FALSE 0
		#define OK 1
		#define ERROR 0
		#define LEN sizeof(Lnode)
		using namespace std;
		static int flag=0;
		
		typedef struct Lnode{
			int data; //一区域
			
			struct Lnode *next; 
		}Lnode, *Linklist;	//??
		
			void InitList (Linklist *L)	{
			Linklist p;
			p = (Linklist)malloc(sizeof(Lnode));		//申请空间 
			if(p == NULL)
				cout << "申请内存空间失败。" << endl;
			p->next=NULL;							//表头地址区 初始为null 
			*L = p;
			flag++;
			}													//初始化一个空的链表
			
			void Creatlist(Linklist L,int n)
		{
		    int i;	
			Lnode *p,*pt;		
			pt=L;
			for(i=1;i<=n;i++)
			{	
				p=(Linklist)malloc(sizeof(Lnode));			//建立节点 
				if(p==NULL)									//判断是否成功 
					cout << "申请内存空间失败。" << endl;
				cout << "请输入链表中元素:" << endl;
				cin >> p->data;			
				p->next=pt->next;
				pt->next=p;
				pt=p;			// 连接节点 
			}
			//flag++;
		}//创建链表
		
		int DestroyList(Linklist L)//销毁链表
		{
			Lnode *p;
			p=NULL;
			if(L && flag!=0)
			{
				while(L)
				{   
					p=L;
					L=L->next;
					free(p);	
				}
				cout << "链表已销毁。" << endl;
			}
			else
				cout << "链表不存在。" << endl;
			return OK;
			flag++;
		}
		
		int Getelem(Linklist L, int i)
		{
			Lnode *p;
			int e;		//用e返回L中第i个数据元素的值
			int j;
			p=L->next;j=1;
			
			while (p && j<i)
			{
				p=p->next;
				++j;
			}		//确定节点位置 
			
			if(!p || j>i)
				cout << "该位序不存在。" << endl;
			else
			{
				e=p->data;
				cout << "第" << i << "个元素为:" << e << endl;
			}
			return OK;
		}
		
		void LocateElem(Linklist L,int *e)
		{
			Lnode *p;
			int i=1;	//输出与条件相符的元素的位序.
			p=L->next;
			while(p!=NULL)
			 { 
				 if(p->data==*e)	//判断是否存在,然后逐个对比 
				 {
					 cout << "元素" << *e <<"的位序是:" << i << endl;
					 break;
				 }
				 p=p->next;
				 i++;
			 }				
			if(p==NULL)
				cout << "该元素不存在。" << endl;
		}
		
		void PriorElem(Linklist L,int e)
		{
			Lnode *p,*pt;
			int i=0;
			p=L->next;
			while(p!=NULL)
			{ 
				if(p->data==e && i!=0)	//找到元素 
				{
					cout << "该元素的直接前驱是:" << pt->data << endl;
					break;//求元素的直接前驱.
				}
				else if(p->data==e && i==0)		//确定不是第一个 
				{
					cout << "该元素没有直接前驱。" << endl;
					break;
				}
				pt=p;
				p=p->next;
				i++;		
			}
			if(p==NULL)
				cout << "该元素不存在。" << endl;
		}
		
		void NextElem(Linklist L,int e)//求元素的直接后继。
		{
			Lnode *p;
			p=L->next;
			while(p!=NULL)
			 { 
				 if(p->data==e)
				 {
					 if(p->next!=NULL)
						 cout << "该元素的直接后继是:" << p->next->data << endl;
					 else
						 cout << "该元素没有直接后继。" << endl;
					 break;
				 }
				 p=p->next;
			 }
			if(p==NULL)
				cout << "该元素不存在。" << endl;
		}
		
		int Listinsert(Linklist L,int i,int e)//在第i个位置插入元素e
		{
			int j;
			Lnode *p,*s;
			p=L; j=0;
			while(p && j<i-1)
			{
				p=p->next;
				++j;
			}
			if(!p || j>i-1)
				return ERROR;
			s=(Linklist)malloc(sizeof(Lnode));
			if(s==NULL)
				cout << "申请内存空间失败。" << endl;
			s->data=e;
			s->next=p->next;
			p->next=s;
			cout << "插入的元素是:" << e << endl;
			return OK;
		}
		
		int Listdelete(Linklist L,int i)//删除第i个数据元素并用e返回其值.
		{
		
			int j;
			Lnode *p,*q;
			p=L;j=0;
			while(p->next && j<i-1)
			{	
				p=p->next;
				++j;
			}
			if(!(p->next) || j>i-1)
			{
				cout << "该位序不存在。" << endl;
				return ERROR;
			}
			q=p->next;
			p->next=q->next;
			cout << "删除的元素是:" << q->data << endl;
		    free(q);
			return OK;
		}
		
		int ListTraverse(Linklist L)//输出all元素.
		{
			Linklist p;
			p=L->next;
			if(p==NULL)
			{
				cout << "该链表中没有元素。" << endl;
				return OK;
			}
			cout << "链表元素如下:" << endl;
			while(p)
			 {
				cout << p->data << endl;
				p=p->next;
			 }
			return OK;
		}
		
		void Tips()
		{
			cout << "可执行操作有:" << endl;
			cout << "+-------------------------------------------------------+" << endl;
			cout << "|**************  1.初始化或重置链表      ***************|" << endl;
			cout << "|**************  2.销毁链表              ***************|" << endl;
			cout << "|**************  3.所指位序的元素值      ***************|" << endl;
			cout << "|**************  4.请输入元素,求直接前驱 ***************|" << endl;
			cout << "|**************  5.请输入元素,求直接后继 ***************|" << endl;
			cout << "|**************  6.在第i个位置插入元素   ***************|" << endl;
			cout << "|**************  7.删除第i个元素         ***************|" << endl;
			cout << "|**************  8.输出所输入的链表元素  ***************|" << endl;
			cout << "|**************  9.初始化并输入链表元素  ***************|" << endl;
			cout << "|**************  10.退出                 ***************|" << endl;
			cout << "+-------------------------------------------------------+" << endl;
		}
		
		int main()
		{ 
			Linklist L; 								//L是指针 
			int i,n2,n1,n4,n5,m1,m2,m3,m4;
			int just=0;
			do
			{
				system("cls");					//清屏 
				Tips();
				cout << "请输入你的选择:"; 		//输入值赋值i 
				cin >> i;		
				switch(i)
				{
					case 1:{
					InitList(&L);
					cout << "成功初始化一个空的链表!" << endl;
					just=1;
					break;						//初始化链表 
			}
						case 2:{
							DestroyList(L);		//删除链表 
							just=0;
							break;
					}
							case 3:{
									if(just)
									{
										cout << "请输入你所要查找的元素:";
										cin >> n4;
										LocateElem(L,&n4);		//节点查询 
									}
									else
										cout << "链表不存在。" << endl;
									break;
							}
								case 4:{
											if(just)
											{
												cout << "请输入元素:";
												cin >> m3;
												PriorElem(L,m3);		//前驱节点 
											}
											else
												cout << "链表不存在。" << endl;
											break;
								}
									case 5:{
										if(just)
										{
											cout << "请输入元素:";
											cin >> m4;
											NextElem(L,m4);
										}							//后驱节点 
										else
											cout << "链表不存在。" << endl;
										break;
									}
										case 6:{
											if(just)
											{
												cout << "请输入插入元素:" ;
												cin >> m1;
												cout << "请输入插入元素的位置:" << endl;
												cin >> m2;
												Listinsert(L,m2,m1);
											}
											else					//插入节点 
												cout << "链表不存在。" << endl;
											break;
										}
									case 7:{
										if(just)
										{
											cout << "请输入删除元素的位置:" << endl;
											cin >> n1;
											Listdelete(L,n1);
										}							//删除节点 
										else
												cout << "链表不存在。" << endl;
										break;
									} 
									
								case 8:{
									if(just)
										ListTraverse(L);
									else				//遍历 
										cout << "链表不存在。" << endl;
									break;
									}
									
							case 9:{
								InitList(&L);		//申请空间 
								cout << "请输入链表长度:";
								cin >> n5;			//初始化并输入链表元素
								Creatlist(L,n5);	//输入 
								just=1;
								break;
								}
						
						case 10:{
							cout << "操作结束!" << endl;
							exit(0);
							break;
						}
					
					case 11:{
					cout << "操作结束!" << endl;
					exit(0);
					}
					
				default:
			{
				cout << "没有该选项,请重新选择。" << endl;
			}
		}
		system("pause");
	}	while(1);
	return 0; 
	}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐