线性链表尾插法及查找第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
}
运行结果:
尾插法图解: