简单实现单链表

#include<iostream>
using namespace std;

typedef struct LNode{
	int  data;
	struct LNode *next;
}LNode,*LinkList;

bool InitList(LinkList &L)
{//初始化 
	L=new LNode;
	L->next=NULL;
	L->data=0;
	return true;
}

bool GetElem(LinkList &L,int i,int &e)
{//取值 
	LNode *p=L->next;
	int j=1;
	while(p&&j<i)
	{
		p=p->next;
		j++;
    }
    if(!p||j>i)  return false;
    e=p->data;
    return true;
}

int LocateElem(LinkList L,int e)
{//查找 
	LNode *p=L->next;
	int j=1;
	while(p&&p->data!=e)
	{
		p=p->next;
		j++;
	}
	if(j>L->data) return false;
	return j;
}

bool ListInsert(LinkList &L,int i,int e)
{//插入 
	LNode *p=L;
	int j=0;
	while(p&&(j<i-1))
	{
		p=p->next;
		++j;
	}
	if(!p || j>i-1)  return false;
	LNode *s;
	s->data=e;
	s->next=p->next;
	p->next=s;
	return true;
}

bool ListDelete(LinkList &L,int i)
{//删除 
	LNode*p=L;int j=0;
	while((p->next)&&(j<i-1))
	{
		p=p->next;
		++j;
	}
	if(!(p->next) || (j>i-1)) return false;
	LNode *q;
	q=p->next;
	p->next=q->next;
	L->data--;
	delete q;
	return true;
}

void ClearList(LinkList &L)
{//清空 
	LNode *p,*q;
	p=L->next;
	while(p)
	{
		q=p->next;
		delete p;
		p=q;
	}
	L->next=NULL;
}

void CreatList_head(LinkList &L,int n)
{//头插法 
	L=new LNode;
	L->next=NULL;
	L->data=0;
	cout<<"请输入这"<<n<<"个数:" <<endl; 
	for(int i=0;i<n;i++)
	{
		int m;
		LNode *p=new LNode;
		cin >> m;
		p->data=m;
		p->next=L->next;
		L->next=p;
		L->data++;
	}
}

void CreatList_end(LinkList &L,int n)
{//尾插法 
	L=new LNode;
	L->next=NULL;
    L->data=0;
    LNode *r;
    r=L;
    cout<<"请输入这"<<n<<"个数:" <<endl; 
    for(int i=0;i<n;i++)
    {
    	int m;
    	LNode *p=new LNode;
    	cin >> m;
    	p->data=m;
    	p->next=NULL;
    	r->next=p;
    	r=p;
    	L->data++;
	}	
}

int main()
{
	cout <<"简单实现单链表"<< endl;
	  cout <<"1、初始化"<< endl; 
	  cout <<"2、插入"<< endl; 
	  cout <<"3、头插法创建链表"<< endl; 
	  cout <<"4、尾插法创建链表"<< endl; 
	  cout <<"5、删除"<< endl; 
	  cout <<"6、取值"<< endl; 
	  cout <<"7、查找"<< endl; 
	  cout <<"8、清空"<< endl; 
	  cout <<"0、退出系统"<< endl; 
	  cout <<"-------------------------------------" <<endl;
	int n,m,a,b,num,c,d,e,f;
	LinkList L;
	while(1)
	{
		cout <<"输入想要执行的操作:" ;
		cin >> n;
		switch(n)
		{
			case 1:
				m=InitList(L);
				if(m)
				  cout <<"链表初始化成功"<<endl;
				break; 
			case 2:
				cout <<"请输入插入的位置及值:";
				cin >>a>>b; 
				cout <<endl;
			    m=ListInsert(L,a,b);
				if(m)
				   cout <<"插入成功"<<endl;
				else
				   cout <<"插入位置不合法"<<endl;
				break;
			case 3:
			    cout <<"请输入你想存多少个数:";
				cin >> num;
				CreatList_head(L,num);
				break;
			case 4:
				cout <<"请输入你想存多少个数:";
				cin >> num;
				cout<<endl; 
				CreatList_end(L,num);
				break;
			case 5:
			    cout <<"请输入你想删除第几个元素"<<endl;
				cin >> c;
				cout<<endl;
				m=ListDelete(L,c);
				if(m)
				  cout << "删除成功" <<endl;
				else
				  cout << "删除位置不合法"<<endl; 
			    break;
			case 6:
			    cout <<"请输入要取第几个位置的值"<<endl;
				cin	>>d;
				cout <<endl;
				m=GetElem(L,d,e);
				if(m)
				  cout<<"这个位置的值为:"<< e <<endl;
				else
				  cout<<"位置不合法"<<endl;
				break;
			case 7:
			    cout <<"请输入要找的值:";
			    cin >> f;
			    cout<<endl;
			    m=LocateElem(L,f);
			    if(m)
			      cout<<"在第"<<m<<"个值"<<endl;
				break;   
			case 8:
			    cout<<"链表已清空!自动退出程序"<<endl;
				exit(0);
			case 0:
			    exit(0);	    	 
		}
		cout<<"当前链表的长度是:"<< L->data <<endl;
		cout << "当前链表的元素为:\n";
		for(int i=1;i<=L->data;i++)
		{
			int e;
			GetElem(L,i,e);
			cout << e << "  ";
		}
		 cout<<endl;
		cout<<"--------------------------------------------"<<endl;
		cout<<endl; 
	 } 
	return 0;	
 } 

借鉴:学长的代码
好难啊啊啊啊(我方了)!!看来学的还是不清晰 !

发布了15 篇原创文章 · 获赞 43 · 访问量 4471

猜你喜欢

转载自blog.csdn.net/wmy0217_/article/details/104010270
今日推荐