⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist.cpp

📁 用c++写的单链表操作有 读出所有链表元素
💻 CPP
字号:
#include <iostream>                           
using namespace std;
typedef char ElemType;
typedef struct LNode                                //定义存储结构
{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
int initlist(LinkList &L)
{
	LinkList s;
	s=new LNode;if(!s)return 0;                    //定义一个头节点
	L=s;s->next=NULL;
	return 0;
}
int doing(LinkList Q);                //预定义选择函数
int length(LinkList L);
int readin(LinkList &L)                            //读入数据 
{
	cout<<"请输入入链长度"<<endl;
	int l;cin>>l;
	if(l<=0)                             //判断  l  是否合法
	{
		cout<<"参数有误"<<endl;
		doing(L);
	}
	cout<<"请输入元素"<<endl;
	char a;                              
	LinkList s,p;
	p=L;
	for(int i=1;i<=l;i++)                    
	{ 
		cin>>a;
    	s=new LNode;
    	s->data=a;
    	s->next=NULL;
    	p->next=s;  p=s;
	}
	return 0;
}
int readout(LinkList L)                     //读出数据
{
	if(length(L)==0)exit(1);             //判空
	LinkList p;
	for(p=L->next;p->next!=NULL;p=p->next)
	{cout<<p->data<<" ";}
	cout<<p->data ;
	return 0;
}
int length(LinkList L)                      //求长度
{
	LinkList p;int i;
	p=L;
	for(i=0;p->next!=NULL;i++)
	{p=p->next;}
	return i;
}
char getelme(LinkList L,int i)              //取指定的元素
{
	if(i<0||i>length(L))                     //判断  i是否合法       
	{
		cout<<"参数有误"<<endl;
		exit(1);
	}
	LinkList p=L;
	int j;
	for(j=1;j<=i;j++)
	{p=p->next ;}
	return p->data;
}
int exchang(LinkList L,int i,char k)              //修改指定的元素
{
	if(i<0||i>length(L))                     //判断  i是否合法       
	{
		cout<<"参数有误"<<endl;
		doing(L);                           //回到选择函数
	}
	LinkList p=L;
	int j;
	for(j=1;j<=i;j++)
	{p=p->next ;}
	p->data=k;
	return 0;
}
int insert(LinkList &L,int i,ElemType k)              //在指定的位置插入数据
{
	if(i<0||i>length(L))                     //判断  i是否合法       
	{
		cout<<"参数有误"<<endl;
		doing(L);                           //回到选择函数
	}
	LinkList p=L;
	LinkList s;
	int j;
	for(j=1;j<i;j++)
	{p=p->next ;}
	s=new LNode;
	s->data=k;
	s->next=p->next;
	p->next=s;
	return 0;
}
int delelem(LinkList &L,int i)              //在指定的位置删除数据
{
	if(i<0||i>length(L))                     //判断  i是否合法       
	{
		cout<<"参数有误"<<endl;
		doing(L);                           //回到选择函数
	}
	LinkList s,p=L;
	int j;
	for(j=1;j<i;j++)
	{p=p->next ;}
	s=p->next;
	p->next =p->next ->next ;
	delete s;
	return 0;
}
int doing(LinkList Q)                                              //功能选择函数
{
   cout<<"--------------------请选择单链表操作-----------------"<<endl;
   cout<<"1.读入元素(初始化只能执行一次,否则前一次被覆盖)  "<<endl;
   cout<<"2.读出所有链表元素 "<<endl;
   cout<<"3.求链表长度            4.在指定位置取元素"<<endl;
   cout<<"5.在指定位置修改元素    6.在指定位置插入元素"<<endl;
   cout<<"7.在指定位置删除元素    "<<endl;
   int a;cin>>a;char b;int i;
   switch (a)                                    
   {
   case 1:readin(Q);break;
   case 2:cout<<readout(Q)<<endl;break;
   case 3:cout<<length(Q)<<endl;;break;
   case 4:
	   {
		   cout<<"请输入位置"<<endl;
		   cin>>i;
		   cout<<"在"<<i<<"处的是"<<getelme(Q,i)<<endl;
	   };break;

   case 5:
	   {
		   cout<<"请输入修改的位置"<<endl;
		   cin>>i;
		   cout<<"请输入修改成的数据"<<endl;
		   cin>>b;
		   exchang(Q,i,b) ;
	   }break;
   case 6:
	   {
		   cout<<"请输入插入的位置"<<endl;
		   cin>>i;
		   cout<<"请输入插入的数据"<<endl;
		   cin>>b;
		   insert(Q,i,b) ;
	   }break;
   case 7:
	   {
		   cout<<"请输入删除的位置"<<endl;
		   cin>>i;
           delelem(Q,i);
	   }break;
   default:cout<<"没有这个操作"<<endl;
   }
   cout<<"继续Y/N";
   char  d;cin>>d;
   if (d=='y'||d=='Y')doing(Q);                          //继续操作
   return 0;
}
int main()
{
   LinkList Q;
   initlist(Q);
   doing(Q);
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -