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

📄 list.h

📁 数据结构基础代码
💻 H
字号:
//线性表的链式存储结构的十项基本操作
#include <iostream.h>
#include <process.h>

//结点定义
typedef struct lnode
{
	int data;
	struct lnode *next;
}lnode,*linklist;

//出错处理
void errormessage(char *s)
{
	cout<<s<<endl;
}

//初始化链式表前插
void creatlist(linklist &l,int n)
{
	linklist p;
	l=NULL;
	for(int i=n;i>0;i--)
	{
		p=new lnode;
		cin>>p->data;
		p->next=l;
		l=p;
	}
	cout<<"创建的链式表元素是:";
	for(i=1;i<=n;i++)
	{
		cout<<p->data<<'\t';
		p=p->next;
	}
}

//遍历
void traverselist(linklist l,int n)
{
	linklist p;
	p=l;
	for(int i=1;i<=n;i++)
	{
		cout<<p->data<<'\t';
		p=p->next;
	}
}

//求长度
int lengthlist(linklist l)
{
	linklist p;
	p=l;
	int k=0;
	while(p)
	{
		k++;
		p=p->next;
	}
	return k;
}

//取元素
int getlnode(linklist l,int i)
{
	linklist p;
	if(i<1||i>lengthlist(l))	
	{
		errormessage("输入值非法!");
		return 0;
	}
	else{
	p=l;
	int k;
	for(k=1;k<i;k++)
	{
		p=p->next;
	}
	return p->data;
	}
}

//求前导
int prelnode(linklist l,int e)
{
	linklist p,q;
	if(lengthlist(l)==1)	return 0;
	else{
	q=p=l;
	while(p&&p->data!=e)
	{
		p=p->next;
		while(q->next!=p)	q=q->next;
	}
	return q->data;}
}

//求后继
int postlnode(linklist l,int e)
{
	linklist p;
	p=l;
	while(p&&p->data!=e)
		p=p->next;
	p=p->next;
		return p->data;
}

//查找元素
int findlnode(linklist l,int e)
{
	linklist p;
	p=l;
	int k=0;
	while(p&&p->data!=e) 
	{
		p=p->next;
		k++;
	}
	if(k<lengthlist(l)) return k+1;
	else{
		errormessage("未找到!");}
}

//插入元素
void insertlnode(linklist &l,int i,lnode *s)
{
	linklist p;
	int j;
	if(i<1||i>lengthlist(l))	errormessage("i值非法!");
	else{
	if(i==1)
	{
		s->next=l;
		l=s;
	}//在表头插入
	else
	{
	p=l;
	j=1;
	while(p->next&&j<i-1)
	{
		p=p->next;
		++j;
	}
	if(!p||j>i-1)	errormessage("Error!");
	s->next=p->next;
	p->next=s;
	}
	cout<<"插入元素后的链表各个元素分别是:";
	traverselist(l,lengthlist(l));
	}
	
}

//删除元素
void deletelnode(linklist &l,int i)
{
	int e,j;
	linklist p,q;
	if(i<1||i>lengthlist(l))	errormessage("i值非法!");
	else{
	if(i==1) 
	{
		q=l;
		l=l->next;
	}
	else
	{
		p=l;j=1;
		while(p->next&&j<i-1)
		{
			p=p->next;
			++j;
		}
		q=p->next;
		p->next=q->next;
	}
	e=q->data;
	delete q;
	traverselist(l,lengthlist(l));
	}
}

//判定空表
void chargelist(linklist l)
{
	if(l=NULL)	cout<<"表为空!"<<endl;
	else cout<<"表非空"<<endl;
}

//置空链式表
void emptylist(linklist &l)
{
	linklist p;
	p=l;
	while(p)
	{
		p->data=0;
		p=p->next;
	}
}

⌨️ 快捷键说明

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