【数据结构】单链表

        c语言,带头不循环单链表。

SList.h

#pragma once

#include<stddef.h>//NULL
#include<stdlib.h>//free
#include<assert.h>//assert

typedef int SLTDataType;

typedef struct SLTNode
{
	SLTDataType data;
	struct SList* pnext;
}SLTNode;

SLTNode* SLTInit();

void SLTPushFront(SLTNode* phead, SLTDataType x);

void SLTPushBack(SLTNode* phead, SLTDataType x);
SLTDataType SLTPopBack(SLTNode* phead);

SLTDataType SLTPopFront(SLTNode* phead);

SList.c

#include "SList.h"

static SLTNode* BuySLTNode(SLTDataType x)
{
	SLTNode* pnewNode = (SLTNode*)malloc(sizeof(SLTNode));
	if (NULL == pnewNode)
	{
		perror("malloc failed");
		exit(-1);
	}
	pnewNode->data = x;
	pnewNode->pnext = NULL;
	return pnewNode;
}

SLTNode* SLTInit()
{
	return BuySLTNode(0);
}

void SLTPushFront(SLTNode* phead, SLTDataType x)
{
	SLTNode* pnewNode = BuySLTNode(x);
	pnewNode->pnext = phead->pnext;
	phead->pnext = pnewNode;
}

void SLTPushBack(SLTNode* phead, SLTDataType x)
{
	while (phead->pnext)
		phead = phead->pnext;
	SLTNode* pnewNode = BuySLTNode(x);
	phead->pnext = pnewNode;
}

SLTDataType SLTPopBack(SLTNode* phead)
{
	assert(phead->pnext);
	SLTNode* pDel = phead->pnext;
	while (pDel->pnext)
	{
		phead = phead->pnext;//找最后一个的前一个
		pDel = pDel->pnext;//找最后一个
	}
	SLTDataType ret = pDel->data;
	phead->pnext = NULL;
	free(pDel);
	return ret;
}

SLTDataType SLTPopFront(SLTNode* phead)
{
	assert(phead->pnext);
	SLTNode* pDel = phead->pnext;
	SLTDataType ret = pDel->data;
	phead->pnext = pDel->pnext;
	free(pDel);
	return ret;
}

test.c

#include<stdio.h>
#include"SList.h"

static void print(SLTNode* phead)
{
	phead = phead->pnext;
	while (phead)
	{
		printf("%d->", phead->data);
		phead = phead->pnext;
	}
	printf("NULL\n");
}


void test1()
{
	SLTDataType ret = 0;
	SLTNode* plist1 = SLTInit(); print(plist1);
	SLTPushFront(plist1, 1); print(plist1);
	SLTPushFront(plist1, 2); print(plist1);
	SLTPushFront(plist1, 3); print(plist1);
	SLTPushFront(plist1, 4); print(plist1);
	SLTPushBack(plist1, 111); print(plist1);
	SLTPushBack(plist1, 112); print(plist1); 
	ret = SLTPopBack(plist1); print(plist1); printf("return = %d\n", ret);
	ret = SLTPopBack(plist1); print(plist1); printf("return = %d\n", ret);
	ret = SLTPopBack(plist1); print(plist1); printf("return = %d\n", ret);

	ret = SLTPopFront(plist1); print(plist1); printf("return = %d\n", ret);
	ret = SLTPopFront(plist1); print(plist1); printf("return = %d\n", ret);
	ret = SLTPopFront(plist1); print(plist1); printf("return = %d\n", ret);
}

int main()
{
	test1();

	return 0;
}

相关推荐

  1. 数据结构:

    2024-06-18 12:40:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 12:40:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 12:40:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 12:40:03       87 阅读
  4. Python语言-面向对象

    2024-06-18 12:40:03       96 阅读

热门阅读

  1. 比较两个对象相同对象不同值

    2024-06-18 12:40:03       28 阅读
  2. “==“和 equals 方法究竟有什么区别?

    2024-06-18 12:40:03       35 阅读
  3. 【斗地主game】

    2024-06-18 12:40:03       28 阅读
  4. Ant-Design-Vue动态表头并填充数据

    2024-06-18 12:40:03       24 阅读
  5. 【React】如何理解 React 的 Fiber?

    2024-06-18 12:40:03       35 阅读
  6. Android XML 布局基础(八)帧布局 - GridLayout

    2024-06-18 12:40:03       33 阅读
  7. AndroidStudio|本地生成APK|build.gradle.kts配置

    2024-06-18 12:40:03       32 阅读
  8. NLP学习与踩坑记录(持续更新版)

    2024-06-18 12:40:03       34 阅读
  9. Eureka 概述与 Eureka Server 配置

    2024-06-18 12:40:03       40 阅读