博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表——数据结构
阅读量:3951 次
发布时间:2019-05-24

本文共 3181 字,大约阅读时间需要 10 分钟。

SLinkedList.h

#pragma once#include
#include
#include
#include
typedef int SLTDateType;typedef struct SListNode{
SLTDateType data; struct SListNode* next;}SListNode;// 动态申请一个节点SListNode* BuySListNode(SLTDateType x);// 单链表打印void SListPrint(SListNode* plist);// 单链表尾插void SListPushBack(SListNode** pplist, SLTDateType x);// 单链表的头插void SListPushFront(SListNode** pplist, SLTDateType x);// 单链表的尾删void SListPopBack(SListNode** pplist);// 单链表头删void SListPopFront(SListNode** pplist);// 单链表查找SListNode* SListFind(SListNode* plist, SLTDateType x);// 单链表在pos位置之后插入x// 分析思考为什么不在pos位置之前插入?void SListInsertAfter(SListNode* pos, SLTDateType x);// 单链表删除pos位置之后的值// 分析思考为什么不删除pos位置?void SListEraseAfter(SListNode* pos);// 单链表的销毁void SListDestory(SListNode* plist);

SLinkedList.c

#define _CRT_SECURE_NO_WARNINGS#include"SLinkedList.h"SListNode* BuySListNode(SLTDateType x) {
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode)); newnode->data = x; newnode->next = NULL; return newnode;}// 单链表打印void SListPrint(SListNode* plist) {
SListNode* cur = plist; if (cur == NULL) {
printf("NULL\n"); } else {
while (cur != NULL) {
printf("%d -->", cur->data); cur = cur->next; } printf("NULL\n"); } }// 单链表尾插void SListPushBack(SListNode** pplist, SLTDateType x) {
SListNode* newnode = BuySListNode(x); if (*pplist == NULL) {
*pplist = newnode; } else {
SListNode* tail = *pplist; while (tail->next != NULL) {
tail = tail->next; } tail->next = newnode; }}// 单链表的尾删void SListPopBack(SListNode** pplist) {
if (*pplist == NULL) {
return; } else if ((*pplist)->next == NULL) {
free(*pplist); *pplist = NULL; } else {
SListNode* prev = NULL; SListNode* tail = *pplist; while (tail->next != NULL) {
prev = tail; tail = tail->next; } free(tail); if (prev != NULL) prev->next = NULL; }}// 单链表的头插void SListPushFront(SListNode** pplist, SLTDateType x) {
SListNode* cur = BuySListNode(x); SListNode* head = *pplist; cur->next = head->next; head->next = cur;}// 单链表头删void SListPopFront(SListNode** pplist) {
SListNode* cur = *pplist; SListNode* next = cur->next; free(cur); *pplist = next; next = NULL;}// 单链表查找SListNode* SListFind(SListNode* plist, SLTDateType x) {
int count = 0; int judge = 0; while (plist != NULL) {
count++; if (plist->data == x) {
printf("所查找值在链表的第%d个结点\n",count); judge = 1; } plist = plist->next; } if (judge == 0) {
printf("链表中查无该值\n"); }}// 单链表在第 i 个结点位置之后插入xvoid SListInsertAfter(SListNode** pplist, int i,SLTDateType x) {
SListNode* cur = *pplist; SListNode* newnode = BuySListNode(x); while (i) {
cur = cur->next; i--; } newnode->next = cur->next; cur->next = newnode;}// 单链表删除第 i 个结点位置之后的值void SListEraseAfter(SListNode* plist,int i) {
SListNode* cur = plist; SListNode* next; while (i) {
cur = cur->next; i--; } next = cur->next; cur->next = next->next; free(next); next = NULL;} 单链表的销毁void SListDestory(SListNode** pplist) {
SListNode* head = *pplist; SListNode* delete; while (head) {
delete = head; head = head->next; free(delete); delete = NULL; } *pplist = NULL;}

转载地址:http://gqwzi.baihongyu.com/

你可能感兴趣的文章
NetWork——关于HTTP、HTTPS的知识总结(以及Android网络优化建议)
查看>>
Android开发——支付宝和微信支付快速接入流程
查看>>
NetWork——TCP的流量控制和拥塞控制
查看>>
Android开发——解决方法数越界问题
查看>>
算法相关——Java排序算法之希尔排序(五)
查看>>
算法相关——Java排序算法之选择排序(六)
查看>>
Android开发—— 热修复Tinker源码浅析
查看>>
算法相关——Java排序算法之堆排序(七)
查看>>
Android开发——Volley的使用详解
查看>>
Android开发——Volley源码解析
查看>>
算法相关——Java排序算法之归并排序(八)
查看>>
Android开发——BroadcastReceiver知识总结
查看>>
算法相关——KMP算法最通俗易懂的解释
查看>>
Android开发——监控造成UI卡顿的原因
查看>>
设计模式——设计模式三大分类以及六大原则
查看>>
Java技术——同步锁的各种知识总结
查看>>
Android开发——适配终结者AutoLayout
查看>>
Android开发——ListView局部刷新的实现
查看>>
Java技术——Java中的参数传值方式
查看>>
Android开发——本地验证码的简易实现
查看>>