当前位置:首页 > 经验 >

单链表各个节点的关系(单链表的中间节点)

来源:原点资讯(www.yd166.com)时间:2022-11-04 00:27:00作者:YD166手机阅读>>

三:全部代码

头文件

#pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h> typedef int SlistDataType; //结点类型定义 typedef struct SlistNode { SlistDataType data;//数据域 struct SlistNode* next;//指向下一个结点的指针 }SlNode; void SlistPushBack(SlNode** head,SlNode** tail, SlistDataType x);//尾插 //void SlistPushBack(SlNode** phead, SlistDataType x);//尾插 void SlistPopBack(SlNode** phead);//尾删 void SlistPushFront(SlNode** phead,SlistDataType x);//头插 void SlistPopFront(SlNode** phead);//头删 SlNode* SlistFind(SlNode* head, SlistDataType x);//找元素 SlNode* Slistinsert(SlNode* pos, SlistDataType x);//任意位置插入 SlNode* Slistdelete(SlNode* pos);//任意位置删除 void SlistPrint(SlNode* head);//打印

函数文件

#include "Slist.h" void SlistPushBack(SlNode** phead, SlNode** ptail, SlistDataType x)//尾插-带尾节点 { SlNode* NewNode = (SlNode*)malloc(sizeof(SlNode)); NewNode->data = x; NewNode->next = NULL; if ((*phead) == NULL) { (*phead)= NewNode; (*ptail) = NewNode; } else { (*ptail)->next = NewNode; (*ptail) = NewNode; } } //void SlistPushBack(SlNode** phead, SlistDataType x)//尾插 //{ // SlNode* NewNode = (SlNode*)malloc(sizeof(SlNode)); // if (NewNode == NULL) // { // printf("申请结点失败\n"); // exit(-1); // } // NewNode->data = x; // NewNode->next = NULL; // SlNode* tail =(*phead); // if ((*phead)== NULL) // { // (*phead) = NewNode; // } // else // { // while (tail->next != NULL) // { // tail = tail->next; // } // tail->next=NewNode; // } // // // //} void SlistPopBack(SlNode** phead)//尾删 { if ((*phead) == NULL) { printf("错误,空链表"); exit(-1); } else if ((*phead)->next == NULL) { free(*phead); (*phead) = NULL; } else { SlNode* current = (*phead); SlNode* pre = NULL; while (current->next != NULL) { pre = current; current = current->next; } free(current); pre->next = NULL; } } void SlistPushFront(SlNode** phead, SlistDataType x)//头插 { SlNode* newNode = (SlNode*)malloc(sizeof(SlNode)); newNode->data = x; newNode ->next= NULL; if (*phead == NULL) { (*phead) = newNode; } else { newNode->next = (*phead); (*phead) = newNode; } } void SlistPopFront(SlNode** phead)//头删 { if ((*phead) == NULL) { printf("错误,链表为空\n"); exit(-1); } if((*phead)->next==NULL) { (*phead) = NULL; } else { (*phead) = (*phead)->next; } } SlNode* SlistFind(SlNode* head, SlistDataType x) { SlNode* current = head; while (current->data != x) { current = current->next; } return current; } SlNode* Slistinsert(SlNode* pos, SlistDataType x) { SlNode* newNode = (SlNode*)malloc(sizeof(SlNode)); newNode->data = x; newNode->next = NULL; newNode->next = pos->next; pos->next = newNode; } SlNode* Slistdelete(SlNode* pos) { assert(pos); if (pos->next != NULL) { SlNode* current = pos->next; pos->next = current->next; free(current); current = NULL; } } void SlistPrint(SlNode* head)//打印 { SlNode* current = head;//申请一个遍历指针,因为头指针不能乱跑 while (current!= NULL) { printf("%d->", current->data); current = current->next;//指针后移 } printf("NULL"); } 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154

测试文件

#include "Slist.h" void test()//增删测试 { SlNode* head=NULL; SlNode* tail = head; SlistPushFront(&head, 1); SlistPushFront(&head, 2); SlistPushFront(&head, 3); SlistPushFront(&head, 4); SlistPushFront(&head, 5); SlistPrint(head); printf("\n"); //要删元素4后面的3,首先拿到元素4的地址 SlNode* find= SlistFind(head, 4); Slistdelete(find); SlistPrint(head); printf("\n"); } int main() { test();//增删测试 return 0; }

如果需要获取工程文件,请关注公众号【0与1】,并在后台回复【数据结构】

栏目热文

单链表找中间的节点(在链表中查找节点)

单链表找中间的节点(在链表中查找节点)

想法:返回单链表的中间节点:采用双指针方法,慢指针走一步,快指针走2步,当快指针走到头,那么慢指针所在的位置就是链表的中...

2022-11-04 00:29:10查看全文 >>

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表查找结点流程图(在单链表中查找一个节点如何操作)

单链表单链表的创建分为头插入法和尾插入法两种,两者并无本质上的不同,都是利用指针指向下一个结点元素的方式进行逐个创建,只...

2022-11-04 00:31:59查看全文 >>

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

在单链表中查找一个节点如何操作(查找链表是否存在一个节点)

单链表的定义链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针连接次序实现的。线性表...

2022-11-04 00:24:09查看全文 >>

查找单链表中最大节点(单链表寻找值最大的结点)

查找单链表中最大节点(单链表寻找值最大的结点)

说真的,任何说起嵌入式软件怎么入门啊?需要学些什么东西啊,我差不多一致的回答都是:软件方面C语言和数据结构加上一些简单常...

2022-11-04 00:12:13查看全文 >>

在单链表中查找值为x的节点(单链表指针怎么指向上一节点)

在单链表中查找值为x的节点(单链表指针怎么指向上一节点)

通过编码实现日常关于链表可能会遇到到编程题1 两个链表是各自自增的,要求合拼之后的链表满足单调不递减/** * 两个递...

2022-11-04 00:44:00查看全文 >>

怎么找单链表节点(如何确认链表节点)

怎么找单链表节点(如何确认链表节点)

福哥答案2020-11-03:1.输入链表头节点,奇数长度返回中点,偶数长度返回上中点 。1.1.快慢指针。1.2.单指...

2022-11-04 00:41:37查看全文 >>

单链表如何判断是不是尾节点(单链表最后一个节点判断条件)

单链表如何判断是不是尾节点(单链表最后一个节点判断条件)

数组与链表是数据结构最基础的两种,其他的诸如hash表、树、队列、栈等都是基于这两种数据结构实现,上面两篇文章介绍了数组...

2022-11-04 00:06:53查看全文 >>

如何确认链表节点(链表如何判断是否为尾节点)

如何确认链表节点(链表如何判断是否为尾节点)

数据结构有顺序存储和链式存储两种存储方式。顺序存储的数组可以使用下标随机访问,但插入操作比较麻烦,且需要整块的内存,另外...

2022-11-04 00:43:50查看全文 >>

单链表查找特定值(单链表的查找并计数)

单链表查找特定值(单链表的查找并计数)

数组中取值可以根据下标获取指定的值,但链表不行,链表中逻辑相邻的元素,在物理上不一定是相邻的。链表中取值只能从首元结点开...

2022-11-04 00:04:49查看全文 >>

单链表中间节点(单链表中各节点是否连续)

单链表中间节点(单链表中各节点是否连续)

单链表是一种线性数据结构,与顺序表占据一段连续的内存空间不同,链表是用一组地址任意的存储单元来存储数据,每个存储单元分散...

2022-11-04 00:25:29查看全文 >>

文档排行