深入解析:408cpp学习之链表(二)
今天我主要学习了单链表的基础操作,包括头插法,尾插法,按位查找以及按元素查找,下面我将我今天所写代码分享给大家。
1. 头插法创建链表
//头插法创建链表
#define maxsize 50
typedef int Elemtype;
typedef struct Lnode {
Elemtype data; //数据域
struct Lnode* next; //指针域
}Lnode,*LinkList;
void head_insert(LinkList L)
{
Elemtype x;
scanf("%d", &x);
LinkList s;
L->next = NULL; //初始化头结点的next指针为NULL
while (x != 99999) //以99999作为输入结束标志
{
s = (LinkList)malloc(sizeof(Lnode)); //创建新结点
s->data = x; //赋值数据域
s->next = L->next; //头插法关键步骤:让新结点指向原来的第一个节点
L->next = s; //头结点指向新结点
scanf("%d", &x); //继续读取输入
}
}
void PrintL(LinkList L)
{
L = L->next; //跳过头结点
while (L!= NULL) //遍历链表直到NULL
{
printf("%3d\n", L->data); //打印当前结点数据
L = L->next; //移动到下一个结点
}
}
2. 尾插法创建链表
//尾插法创建链表
#define maxsize 50
typedef int elemtype;
typedef struct Lnode {
elemtype data;
struct Lnode* next;
}Lnode,* link_list;
void tail_insert(link_list L)
{
L->next = NULL; //初始化头结点的next指针为NULL
elemtype x;
scanf("%d", &x);
link_list r = L; //r始终指向链表尾部
link_list s;
while (x != 99999) //以99999作为输入结束标志
{
s = (link_list)malloc(sizeof(Lnode)); //创建新结点
s->data = x; //赋值数据域
r->next = s; //尾部结点的next指向新结点
r = r->next; //r指向新的尾部
scanf("%d", &x); //继续读取输入
}
r->next = NULL; //最后将尾结点的next置为NULL
}
3. 按位置查找结点
//按位置查找链表结点
link_list Search_L(link_list L,int posi)
{
int i = 1; //从第一个结点开始计数(头结点不算)
while (L && i <= posi) //遍历直到找到指定位置或链表结束
{
L = L->next;
i++;
}
return L; //返回找到的结点指针,没找到返回NULL
}
4. 按值查找结点
//按值查找链表结点
link_list search_num(link_list L, elemtype num)
{
L = L->next; //跳过头结点
while (L) //遍历链表
{
if (L->data == num) //找到匹配的值
{
return L; //返回结点指针
}
L = L->next; //继续下一个结点
}
return NULL; //没找到返回NULL
}
5. 在指定位置插入结点
//在链表指定位置插入结点
void insert_num(link_list L, elemtype num, elemtype posi)
{
elemtype i = 0;
//找到插入位置的前一个结点
while (L && posi && i < posi - 1)
{
L = L->next;
i++;
}
link_list s;
s = (link_list)malloc(sizeof(Lnode)); //创建新结点
s->data = num; //赋值数据域
s->next = L->next; //新结点指向原位置的结点
L->next = s; //前一个结点指向新结点
}
浙公网安备 33010602011771号