一个小小的数据结构程序

源代码在线查看: 单链表的运算.cpp

软件大小: 3 K
上传用户: sun337146987
关键词: 数据结构 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				//-------------------实验三、单链表的运算-------------------------
				#include 
				#include 
				using namespace std;
				//----------------------------------------------------------------
				class node{                                //结点类定义
				public:	
					string nodevalue;
					node *next;
				
					node():next(NULL){}                    //构造函数  
				    node(const string item,node *nextnode=NULL):nodevalue(item),next(nextnode){}
				};//---------------------------------------------------------------
				class L{                                  //单链表类声明
					node *head;                           //结点成员
				    static int length;
				public:
					L();                                  //构造函数
					bool isListEmpty();                   //判空成员函数
					int ListLength();                     //求表长成员函数
					void DispList();                      //打印单链表函数
					node* GetElem(int pos);               //根据位置找结点
				    int LocateElem(string elem);          //查找元素在表中第一次出现的位置
					void ListInsert(string &elem,int pos);//在表中插入一个结点
					int ListDelete(int pos);              //删除一个结点   
					void ListDelete(string &elm);         //重载删除函数
					~L(){}                                //析构函数
				};//---------------------------------------------------------------
				int L::length=0;                          //初始化表长 
				L::L(){                                   //单链表的构造函数定义  
				      node *p,*curr;
				      string tmp;
				      cout				      cin>>tmp;
					  if(tmp=="0"){
				          length=0;
						  head=NULL;
						  }
				      else{
				          head=new node(tmp);
				          length=1;
				          p=head;
						  while(1){
						  cin>>tmp;
						  if(tmp=="0"){
							  p->next=NULL;
							  break;
						  }
						  else{
						  curr=new node(tmp);
					      p->next=curr;
						  p=curr;
					      length++;
						  }
						  }
						  p->next=NULL;
						  }
				}//---------------------------------------------------------------
				bool L::isListEmpty(){                     //单链表判空函数声明 
					if(length==0)
						return 1;
					else
						return 0;
				}//---------------------------------------------------------------
				
				int L::ListLength(){                       //求表长
					return length;
				}//---------------------------------------------------------------
				
				void L::DispList(){                        //显示单链表
					node *curr;
					curr=head;
					cout					if(this->isListEmpty())
						cout					else{
						for(int i=1;i						cout						curr=curr->next;
						}
						cout					}
				}//---------------------------------------------------------------
				node* L::GetElem(int pos){                //根据位置查找,返回结点指针
					node *curr;
					curr=head;
					if(pos>length)
						return NULL;
					else{
						for(int i=1;i							curr=curr->next;
						return curr;
					}
				}//---------------------------------------------------------------
				int L::LocateElem(string elem){            //根据元素查找位置,返回元素的序号   
					node *curr;int n=1;
					curr=head;
					while(curr!=NULL&&curr->nodevalue!=elem){
						curr=curr->next;
						n++;
					}
					if(curr==NULL)
						return(0);
					else
						return(n);
				}//---------------------------------------------------------------
				void L::ListInsert(string &elem,int pos){  //将elem插入到表的第pos处
					node *curr,*s;
					int j=1;
					if(pos==1){                            //插入到头结点    
						curr=new node(elem,head);
						head=curr;
						length++;
					}
					else if(pos-1==length){                //插入到尾结点
						curr=this->GetElem(pos-1);
						curr->next=new node(elem);
						length++;
					}
					else if(pos>1&&pos						curr=head;
						while(j							curr=curr->next;
							j++;
						}
						s=new node(elem);
						s->next=curr->next;
						curr->next=s;
						length++;
					}
					else
						cout				
				}//---------------------------------------------------------------
				int L::ListDelete(int pos){               //删除第pos个元素,根据返回值判断是否成功
					node *curr,*s;
					int j=0;
					curr=this->GetElem(pos-1);
					if((curr->next==NULL)||(j>pos-1))
						return 0;
					if(pos==1&&(length>1)){                //删除头结点   
							s=head;
							head=head->next;
							free(s);
							length--;
							return 1;
					}
					else if(pos==length&&(length>1)){      //删除尾结点
							s=curr->next;
							curr->next=NULL;
							free(s);
							length--;
							return 1;
					}
					else if(length==1){
						free(head);
						length=0;
					}
					else{                                 //删除普通结点
							s=curr->next;
						    curr->next=s->next;
						    free(s);
						    length--;
							return 1;
					}
				}//---------------------------------------------------------------
				void L::ListDelete(string &elm){           //删除元素elm   
					int j=1;
					j=this->LocateElem(elm);
					if(j!=0){
						cout						this->ListDelete(j);
					}
				}//---------------------------------------------------------------
				int menu1(){                               //根菜单 
					int i=0;
					cout					cout					cout					cout					cin>>i;
					cout					if((i5))
						menu1();
					else
						return(i);
				};//---------------------------------------------------------------
				int menu2(){                            //删除操作选择菜单
					int j;
					cout					cout					cout				    cout					cin>>j;
					cout					return j;
				}//---------------------------------------------------------------
				int menu3(){                              //查找操作选择菜单     
					int k;
					cout					cout					cout				    cout					cin>>k;
					cout					return k;
				}//---------------------------------------------------------------
				void main(){//----------------------主函数------------------------
					int i;string elem;
					L list;
					list.DispList();
				loop:
					i=menu1();
					if(i==1){                              //插入
						int pos;
						cout						cin>>elem>>pos;
						list.ListInsert(elem,pos);
						list.DispList();
						goto loop;
					}
					else if(i==2){                        //删除
						int returnvalue;
						returnvalue=menu2();
						if(returnvalue==1){               //删除指定位置的元素
							int pos;
							cout							cin>>pos;
							if(pos>list.ListLength())
								cout							else{
								cout								list.ListDelete(pos);
								cout								list.DispList();
							}
							goto loop;
				
						}
						else if(returnvalue==2){           //删除指定元素
							string elm;
							cout							cin>>elm;
							cout							list.ListDelete(elm);
							cout							list.DispList();
						    goto loop;
						}
						else if(returnvalue==3)
							goto loop;
					}
					else if(i==3){                        //查找
						int returnvalue;
						returnvalue=menu3();
						if(returnvalue==1){               //查找指定位置的元素 
							int pos;
							cout							cin>>pos;
							if(list.GetElem(pos)==NULL)
								cout							else
								cout							goto loop;
						}
						else if(returnvalue==2){          //查找指定元素
							string elm;
							cout							cin>>elm;
							if(list.LocateElem(elm)==0)
								cout							else{
							cout							}
							goto loop;
						}
						else if(returnvalue==3)           //返回根菜单
							goto loop;
					}
					else if(i==4){                        //打印单链表
						list.DispList();
						goto loop;
					}
					else if(i==5){                        //退出程序 
						exit(0);
						getchar();
					}
					else
						goto loop;
				}//---------------------------------------------------------------
				
							

相关资源