#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define len sizeof(LNode)
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode,*Linklist;
//尾插法建立单链表
Linklist crateList(Linklist &L)
{
int x;
L = (Linklist)malloc(len);//头节点
Linklist r , s;
r = L;
scanf("%d", &x);
while (x!=9999)
{
s = (Linklist)malloc(len);
s->data = x;
r->next = s;
r =s;
scanf("%d", &x);
}
r->next = NULL;
return L;
}
//查找第几i个节点的值
Linklist getelem(Linklist L,int i) {
int j = 1;
Linklist p = L->next;
if (0 == i)
return L;
if (i < 1)
return NULL;
if (p && j < i)
{
p = p->next;
j++;
}
return p;
}
//按值查找
Linklist search(Linklist L, ElemType e) {
Linklist p = L->next;
while (p != NULL && p->data != e)
{
p = p->next;
}
return p;
}
//插入元素
bool insertList(Linklist& L, ElemType i,ElemType e)
{
//scanf("%d %d", &i,&e);//要修改的位置i,要插入的数;
Linklist p = getelem(L, i-1);//前驱节点p
Linklist s;
s = (Linklist)malloc(len);//用来存放要插入元素的节点
if (i < 1)
return false;
if (p->next == NULL)//最后节点插入
{
s->data = e;
p->next = s;
s->next = NULL;
return true;
}
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
void print(Linklist L)
{
L= L->next;
while (NULL!=L)
{
printf("%3d", L->data);
L = L->next;
}
printf("\n");
}
int main()
{
Linklist L;
printf("创建链表,输入9999结束");
crateList(L);
print(L);
getelem(L,2);//查找第二个位置的元素
printf("%d",getelem(L,2)->data);
insertList(L, 2, 4);
printf("\n");
print(L);
//按值查找
search(L,3);
if (search(L, 3)!=NULL)
printf("查找成功");
else
printf("查找失败");
}
尾插法建立单链表.cpp
于 2022-04-16 15:48:58 首次发布