链表新11235525

#include<iostream>
using namespace std;
//定义单链表;结点内容为“学号”“姓名”“成绩” 
//预定义常量和类型
#define TURE 1;
#define FALSE 0;
#define OK 1;
#define ERROR 0;
#define  INFEASIBLE -1;
#define OVERFLOW -2; 
typedef int  ElemType; 
typedef struct Lnode
{
	ElemType data;//数据域 
	struct Lnode *next; //指针域; 
} Lnode,*LinkList;
typedef int status;
//初始化; 
status initList_L(LinkList &L)
{
	L=new Lnode;
	L->next=NULL;
	return OK;
}
//判断链表是否为空;
status isEmpty(LinkList l)
{
	if(l->next)
	{
		return FALSE; 
	} else
	{return TURE;} 
} 
//销毁链表,头结点头指针结点都销毁 niubi666wodebaobei
status destroyList(LinkList &L)
{
	Lnode *p;
	while(L)
	{
		p=L;
		L=L->next;
		delete p; 
	} 
	if(L==NULL)
	{
		return OK; 
	} else return FALSE; 
} 
//清空单链表 (链表依然存在,但是链表没有元素
//1,依次释放所有结点,2,将头结点的指针域设置为空;
status clearList(LinkList &L)
{
	Lnode *p;
	p=L->next;
	Lnode *q;
	while (p)
	{		
		q=p->next;
		delete p;
		p=q;  
	 } 
	 L->next =NULL; 
	 return OK; 
} 
//求链表的表长;
int linkList_length(LinkList L)
{
	int length=0;
	Lnode *p;
	p=L->next;
	while(p) 
	{
		length ++;
		p=p->next; 
	} 
	return length; 
} 
//找单链表中的第i个元素;
//链表不是随机存取的
//ElemType selectLinklist(LinkList L,int i)//i>=1&&i<=L.length; 
//{
//	if(linkList_length(L)<i||i<=0) 
//	{
//		
//		break; 
//	} 
//	int j=0; 
//	Lnode *p;
//	p=L-> next;
//	while (p)     //优化,while(p&&j<i)  
//	{	
//		j++;
//		if(j==i)
//		{
//			return p->data;
//			break; 
//		} 
//		p=p->next; 
//	} 
//} 
status getELem_L(LinkList L,int i,ElemType &e)
{//通过变量e返回第i个元素的值;    
	Lnode *p;
	p=L->next;
	int j=1;
	while (p&&j<i)//向后扫描,直到p为空或者,p指向第i个元素; 
	{
		p=p->next;
		j++; 
	} 
	if(p==NULL|| j>i)
	{
		return ERROR; 
	} 
	e=p->data; //取第i个元素; 
	return OK; 
} 
//按值查找,根据指定数据查找该数据的位置,
/*status valueSelect(LinkList L,ElemType data,int &i)  
{
	Lnode *p=L->next; 
	i=1; 
	while (p)
	{
		if((p->data)==data)
		{
			break; 
		} 
		p=p->next; 
		i++; 
	} 
	//return  INFEASIBLE;//找不到; 
} */ 
Lnode * LocateElem_L(LinkList L,ElemType e)
{
	Lnode *p;
	p=L->next;
	while (p&&p->data!=e) //到最后一个或找到时停止循环 
	{
		p=p->next; 
	} 
	return p; 
} 
//按值查找,找到后返回序号。
int locateElem_L(LinkList L,ElemType e)
{
	Lnode *p;//结点指针
	p=L->next;//p指向首元结点
	int j=1;
	while (p&&p->data!=e)
	{
		j++;
		p=p->next; 
	} 
	if(p==NULL)
	{return 0;} 
	else return j; 
} 
//插入新的结点e
status insertLinkList (LinkList &L,ElemType e,int i)
{//i=1就是首元节点; 
	Lnode *p;
	p=L->next; 
	int j=1; 
	//遍历找第i-1个节点; 
	while (p&&j<i-1)// 循环结束的条件是,p为空指针,或,节点指针直到第i-1个元素 
	{
		p=p->next; 
		j++ ; 
	} 
	if(!p||j>i) 
	return ERROR;
	LinkList s=new Lnode;//生成新的节点; 
	s->data=e;
	s->next=p->next;
	p->next=s;
	
} 
//删除第i个元素 
status deleteElemDefe (LinkList &L,int i)
{
	Lnode *p,*q;
	p=L->next;
	int j=1;
	while(p&&j<i-1)
	{
		j++;
		p=p->next;
	}
	if(!p||j>i)
	
	q=p->next;//留一下,被删元素,待delete 
	p->next=p->next->next;
	delete q;
}
//单链表的建立——头插法
void setLinkList (LinkList &L,int n)
{
	L=new Lnode; //生成头节点 
	L->next=NULL;
	for(int i=n;i>0;i--)
	{
		Lnode *p;
		p=new Lnode;
		cin>>p->data;
		p->next =L->next;
		L->next=p;
	 } 
 } 
 //尾插法
 //需要一个尾指针;
 void setElemType (LinkList &L,int n)
 {
 	L=new Lnode;
 	L->next =NULL;
 	Lnode *r;
 	r=L;
 	for (int i=0;i<n;i++)
 	{
 	  Lnode *p;
 	  p=new Lnode;
 	  cin<<p->data;
 	  p->data=NULL;
 	  r->next=p;
 	  r=p;
	 }
  } 
int main( ){
	LinkList L;
	initList_L(L);
} 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值