[数据结构]——单链表(动态申请结点单链表打印头插尾插头删尾删)
Posted FortunateJA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构]——单链表(动态申请结点单链表打印头插尾插头删尾删)相关的知识,希望对你有一定的参考价值。
SList.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
typedef int SLTDataType;
typedef struct SListNode
SLTDataType data;
struct SListNode* next;
SListNode;
SListNode* BuySListNode(SLTDataType x); //动态申请结点
void SListPrint(SListNode *phead); //单链表打印
void SListPushFront(SListNode **pphead, SLTDataType x); //头插
void SListPushBack(SListNode **pphead, SLTDataType x); //尾插
void SListPopFront(SListNode **pphead); //头删
void SListPopBack(SListNode **pphead); //尾删
SList.c
#include "SList.h"
SListNode* BuySListNode(SLTDataType x) //动态申请结点
SListNode *tmp = (SListNode *)malloc(sizeof(SListNode));
if (tmp == NULL)
printf("malloc fail\\n");
exit(-1);
tmp->data = x;
tmp->next = NULL;
return tmp;
void SListPrint(SListNode *phead) //单链表打印
SListNode *temp = phead;
while (temp != NULL)
printf("%d->", temp->data);
temp = temp->next;
printf("NULL\\n");
/*头插和尾插要考虑两种情况:
1.pphead指向空链表
2.pphead指向的链表有两个或超过两个结点*/
void SListPushFront(SListNode **pphead, SLTDataType x) //头插
SListNode *temp = BuySListNode(x);
if (*pphead == NULL)
*pphead = temp;
else
temp->next = *pphead;
*pphead = temp;
void SListPushBack(SListNode **pphead, SLTDataType x) //尾插
SListNode *temp = BuySListNode(x);
if (*pphead == NULL)
*pphead = temp;
else
SListNode *cur = *pphead;
while (cur->next != NULL)
cur = cur->next;
cur->next = temp;
/*头删和尾删要考虑三种情况:
1.pphead指向空链表
2.pphead指向的链表只有一个结点
3.pphead指向的链表有多个结点*/
void SListPopFront(SListNode **pphead) //头删
if (*pphead == NULL)
return;
else if ((*pphead)->next == NULL)
free(*pphead);
*pphead = NULL;
else ///
/*
SListNode *temp = *pphead;
*pphead = (*pphead)->next;
free(temp);
temp = NULL; */
SListNode* next = (*pphead)->next;
free(*pphead);
*pphead = next;
void SListPopBack(SListNode **pphead) //尾删
if (*pphead == NULL)
return;
else if ((*pphead)->next == NULL)
free(*pphead);
*pphead = NULL;
else
SListNode *temp = *pphead;
SListNode *cur = NULL;
while (temp->next != NULL)
cur = temp;
temp = temp->next;
free(temp);
temp = NULL;
cur->next = NULL;
Test.c
#include "SList.h"
int main()
SListNode *phead = NULL;
SListPushFront(&phead, 1);
SListPushFront(&phead, 2);
SListPushFront(&phead, 3);
printf("PushFront:");
SListPrint(phead);
SListPushBack(&phead, 1);
SListPushBack(&phead, 2);
SListPushBack(&phead, 3);
printf("PushBack:");
SListPrint(phead);
SListPopFront(&phead);
printf("PopFront:");
SListPrint(phead);
SListPopBack(&phead);
printf("PopBack:");
SListPrint(phead);
return 0;
测试结果
以上是关于[数据结构]——单链表(动态申请结点单链表打印头插尾插头删尾删)的主要内容,如果未能解决你的问题,请参考以下文章