欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性链表尾插法及查找第i位的值 (完整代码)

程序员文章站 2022-06-06 13:34:03
...

单链表的创建(尾插法):首先创建一个头指针,在创建一个循环进行赋值,链接。void creat(linklist &l)

查找链表第i位的值:将第i个元素赋值给e,若不存在第i个元素返回-1。
status getelem_l(linklist l,int i,elemtype &e) 

代码实现:

//创建单链表及查找第i位的值 
#include <stdio.h> 
#include <iostream>
#include <malloc.h>
using namespace std; 
typedef int status;
typedef int elemtype;

typedef struct LNode{
	elemtype data;
	struct LNode *next;	//定义的*next为指向结构体LNode类型的指针 
}LNode,*linklist;		// *linklist相等于一个列表头指针,也是结构体类型 


//将第i个元素赋值给e,若不存在第i个元素返回error
//l为带头节点的单链表的头指针 
status getelem_l(linklist l,int i,elemtype &e)
{
LNode *p=l->next;		//初始化,p指向第一个结点,头结点 
	int j=1;			//计时器,第几个元素 
	while(p&&j<i)
	{
		p=p->next;
		j++;
	}
	if(!p||j>i)
	{
		printf("不存在第i个元素");
		return -1;
	}
	else 
	{
		e=p->data;
	cout<<"第"<<i<<"个元素值为:"<<(char)e;
	return e;
	}	
} 


//创建链表 ,尾插法
void creat(linklist &l)
{//l为头指针,指向头结点 
	//LNode *p,*q;//p为当前指针 ,定义与下一行相同 
	linklist p,q; 
	char d;
	l=(LNode *)malloc(sizeof(LNode));
	l->next=NULL;
	p=l;
	cout<<"请输入元素,输入*停止输入"<<endl;
	cin>>d; 
	while(d!='*') 
	{
		q= (LNode *)malloc(sizeof(LNode));
		q->data=d;
		q->next=NULL;
		p->next=q;
		p=p->next;
		cin>>d;
	}	
//	for(p=l->next;p!=NULL;p=p->next)
//	{
//		//printf("%c\n",p->data);
//		cout<<(char)p->data<<endl;//强制转换 
//	}


}
  int main()
{    int i;
	elemtype e;
	linklist l;				//为头指针 
	creat(l);				//创建单链表 
	cout<<"请输入要查找第几位:"<<endl; 
	cin>>i;
	getelem_l(l,i,e);		//l的第二个参数位置的值赋于e 
	 
}

运行结果:

线性链表尾插法及查找第i位的值 (完整代码)

尾插法图解:

线性链表尾插法及查找第i位的值 (完整代码)

相关标签: 单链表