//头文件 有关于链表的初始化和设定
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#pragma warning (disable:4996)
typedef int SLDatatype;
//结点
typedef struct SListNode
{
SLDatatype data;
struct SListNode* next;
}SListNode;
// 动态申请一个节点
SListNode* BuySListNode(SLDatatype x);
// 单链表打印
void SListPrint(SListNode * phead);
// 单链表尾插
void SListPushBack(SListNode** pplist, SLDatatype x);
// 单链表的头插
void SListPushFront(SListNode** pplist, SLDatatype x);
// 单链表的尾删
void SListPopBack(SListNode** pplist);
// 单链表头删
void SListPopFront(SListNode** pplist);
//链表中一个结点的定义
// 动态申请一个节点
SListNode* BuySListNode(SLDatatype x)
{
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
if (newnode == NULL)
{
printf("这个结点建立失败");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
return newnode;
}
// 单链表打印
void SListPrint(SListNode * phead)
{
SListNode *cur = phead;
while (cur != NULL)
{
printf("%d->", cur->data);
cur = cur->next;
}
}
// 单链表尾插
void SListPushBack(SListNode ** phead, SLDatatype x)
{
SListNode* newnode = BuySListNode(x);
if (*phead == NULL)
{
*phead = newnode;
}
else
{
SListNode * tail = *phead;
//这个是求出这个链表的结尾
while (tail->next!=NULL)
{
tail = tail->next;
}
tail->next = newnode;
}
}
// 单链表的头插
void SListPushFront(SListNode** phead, SLDatatype x)
{
SListNode* newnode = BuySListNode(x);
newnode->next = *phead;
*phead = newnode;
}
// 单链表的尾删
void SListPopBack(SListNode** phead)
{
//1.空
if (*phead==NULL)
{
return;
}
//2.一个结点
else if ((*phead)->next == NULL)
{
free(*phead);
*phead = NULL;
}
//3.多个结点
else
{
SListNode* tail = *phead;
SListNode* prev = *phead;
while (tail->next != NULL)
{
prev = tail;
tail = tail->next;
}
free(tail);
prev->next = NULL;
}
}
// 单链表头删
void SListPopFront(SListNode** phead)
{
//1.空指针
//2.一个结点或者是多个结点
if (*phead = NULL)
{
return;
}
else
{
SListNode* next = (*phead)->next;
free(*phead);
*phead = next;
}
}
//进行测试所用的主函数
//这边只测试了链表的头插尾插头删尾删没有写出来别的,但是都是通过的
int main()
{
//定义一个头指针 初始化为NULL
SListNode * phead=NULL;
SListPushFront(&phead, 1);
SListPushFront(&phead, 2);
SListPushFront(&phead, 3);
SListPushBack( &phead, 1);
SListPushBack( &phead, 2);
SListPushBack( &phead, 3);
SListPopBack(&phead);
SListPrint(phead);
system("pause");
return 0;
}
最详细最正确之链表的增删查改 让你一目了然无敌就完事
最新推荐文章于 2023-01-12 16:20:19 发布