人生必须的知识就是引人向光明方面的明灯。这篇文章主要讲述单链表各种操作的代码实现相关的知识,希望能为你提供帮助。
单链表各种操作的代码实现今天简简单单的复习一下单链表的各种操作。
具体操作有:打印,尾插,头插,尾删,头删,在任意结点之前插入,删除任意结点,malloc一个新结点,在所给链表中查找数据x,并返回它的结点等。
标注的比较详细,可以借助注释食用哦。
分为三个项:
SList.h:
#include<
stdio.h>
#include<
string.h>
#include<
stdlib.h>
#define _CRT_SECURE_NO_WARNINGS 1typedef int SLTDataType;
struct SListNode
{
SLTDataType data;
//链表的数据
struct SListNode* next;
//链表的指针
};
typedef struct SListNodeSLTNode;
//改个名字void SListPrint(SLTNode* phead);
//打印
void SListPushBack(SLTNode** pphead,SLTDataType);
//尾插
void SListPushFront(SLTNode** pphead, SLTDataType x);
//头插
void SListPopBack(SLTNode** pphead);
//尾删
void SListPopFront(SLTNode** pphead);
//头删
void SListInsert(SLTNode** pphead, int pos, SLTDataType x);
//在任意位置插入
void SListErase(SLTNode** pphead, int pos);
//在任意位置删除
SLTNode* BuySListNode(SLTDataType x);
//malloc一个结点
SLTNode* SListFind(SLTNode*phead, SLTDataType x);
//在所给链表中查找数据x,并返回它的结点
SList.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"SLTNode* BuySListNode(SLTDataType x)//malloc一个结点
{
SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
newnode->
data = https://www.songbingjia.com/android/x;
newnode->
next = NULL;
return newnode;
}
void SListPrint(SLTNode* phead)//打印
{
SLTNode* cur = phead;
if (phead != NULL)
{
while (cur != NULL)
{
printf("%d->
", cur->
data);
cur = cur->
next;
}
printf("NULL\\n");
}
else
{
printf("您输入的链表为空");
}
}
void SListPushBack(SLTNode** pphead, SLTDataType x)//尾插
{
SLTNode* newnode = BuySListNode(x);
SLTNode* tail = *pphead;
if (*pphead == NULL)
{
*pphead = newnode;
}
else
{
//找尾节点的指针
while (tail->
next != NULL)
{
tail = tail->
next;
}
tail->
next = newnode;
}
}
void SListPushFront(SLTNode** pphead, SLTDataType x)//头插
{
SLTNode* newnode = BuySListNode(x);
newnode->
next = *pphead;
*pphead = newnode;
}
void SListPopFront(SLTNode** pphead)//头删
{
if (*pphead == NULL)
return;
else
{
SLTNode* tmp = *pphead;
*pphead = tmp->
next;
free(tmp);
}
}void SListPopBack(SLTNode** pphead)//尾删
{
SLTNode* tmpt = *pphead;
if (*pphead == NULL)
{
return;
}
else if (tmpt->
next == NULL)
{
free(*pphead);
*pphead = NULL;
//千万不要把==看成=!!
}
else
{
//SLTNode* tmpt2 = tmpt->
next;
while (tmpt->
next->
next != NULL)
{
tmpt = tmpt->
next;
}
free(tmpt->
next);
tmpt->
next = NULL;
}
}void SListInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)//在任意结点之前插入数据
{
SLTNode* newnode = BuySListNode(x);
if (*pphead == NULL)
{
*pphead = newnode;
newnode->
next = NULL;
}
else if (pos == *pphead)
{
newnode->
next = *pphead;
*pphead = newnode;
}
else
{
SLTNode* tmpt = *pphead;
while (tmpt->
next != pos)
{
tmpt = tmpt->
next;
}
tmpt->
next = newnode;
newnode->
next = pos;
}}SLTNode* SListFind(SLTNode* phead, SLTDataType x)//查找
{
SLTNode* cur = phead;
while (cur)
{
if (cur->
data =https://www.songbingjia.com/android/= x)
return cur;
else
cur = cur->
next;
}
return NULL;
}void SListErase(SLTNode** pphead, SLTNode* pos)//删除任意结点
{
SLTNode* cur = *pphead;
if (*pphead == NULL)
{
return;
}
else if(pos==*pphead)
{*pphead = cur->
next;
free(cur);
cur = NULL;
}
else
{
while (cur->
next != pos)
{
cur = cur->
next;
}
cur->
next = pos->
next;
free(pos);
}}
Test.c:
#pragma once
#include"SList.h"test1()
{
SLTNode* phead = NULL;
;
SListPushBack(&
phead, 1);
SListPushBack(&
phead, 2);
SListPushBack(&
phead, 3);
SListPrint(phead);
//想在1前面插入0.
SLTNode* pos = SListFind(phead, 1);
//先找到1
if (pos != NULL)
{
SListInsert(&
phead, pos, 0);
SListPrint(phead);
}
else
printf("没有找到您要找的位置");
//想要删除链表中的2.
SLTNode* pos2 = SListFind(phead,2);
//先找到2
if (pos2 != NULL)
{
SListErase(&
phead, pos2);
SListPrint(phead);
}
else
{
printf("没有找到您要删除的元素");
}
}
int main()
{
test1();
return 0;
}
【单链表各种操作的代码实现】觉得对自己有帮助的小伙伴可以点个赞哦
推荐阅读
- Centos7 安装 nbd模块
- Redis集群高可用(Keepalived+Twemproxy)
- 使用jQuery下拉隐藏显示
- WordPress网站标识中的双logo()
- Divi主题与Yoast SEO冲突
- DIVI网站修改由于”空白引荐来源”而被阻止-有任何解决方法()
- Divi Builder编辑器未显示
- 使用短代码显示WordPress页面内容并显示嵌入式短代码
- 显示wordpress的第一个帖子