C语言一个单链表的实现】的更多相关文章

-- 所谓链表记住一句即可:地址不连续,大家只是握个手而已: list0.c #include<stdio.h> #include<malloc.h> typedef int Item;//定义数据项类型 typedef struct node * PNode;//定义节点指针 //节点的定义 typedef struct node { Item item;//数据域 PNode next;//链域 }Node,* SList; /* int SL_Creat(SList *p_l…
目的:主要是练习c里面单链表的实现,递归思想复习; #include <stdlib.h> #include <stdio.h> typedef struct _Node{//定义单链表的节点 int value; struct _Node *next; }Node; Node* link(int len){//新建一个单链表 ; Node* head = (Node*)malloc(sizeof(Node)); head->value = -; Node* tail = h…
在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4,一个专门遍历数据的功能: Solution 我们的数据结构体定义如下,和上一个版本稍微有所不同: 例如,我们把人这个结构体添加一个name域,前几个版本没有名字的节点: 我们叫起来很尴尬,都是第几个第几个节点,好啦!现在有名字啦! #include <stdio.h> #include <s…
我们在C语言实现单链表-01版中实现的链表非常简单: 但是它对于理解单链表是非常有帮助的,至少我就是这样认为的: 简单的不能再简单的东西没那么实用,所以我们接下来要大规模的修改啦: Problem 1,要是数据很多怎么办,100000个节点,这个main函数得写多长啊... 2,这个连接的方式也太土啦吧!万一某个节点忘记连接下一个怎么办... 3,要是我想知道这个节点到底有多长,难道每次都要从头到尾数一遍嘛... 4,要是我想在尾部添加一个节点,是不是爬也要爬到尾部去啊... 这个是简单版中提出…
最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章——指针与链表),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表…
C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). 5.链表反转(普通方法.递归方法). 6.链表合并. 7.获取链表中间节点. 8.判断链表是否有环. LinkList.h : #include <stdio.h> #include <stdlib.h> struct LinkNode { int data; struct LinkN…
我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https://github.com/chenyufeng1991/DeleteLinkedList_HeadNode.删除类型有两种: (1)删除某个位置pos的节点: (2)推断x值是否在链表中,若存在则删除该节点: 核心代码例如以下: //删除某个位置pos的节点 Node *DeletePosNode(Node…
彻底理解链表中为何使用二级指针或者一级指针的引用 数据结构之链表-链表实现及常用操作(C++篇) C语言实现单链表,主要功能为空链表创建,链表初始化(头插法),链表元素读取,按位置插入,(有序链表)按值插入,按位置删除,按值删除,清空链表,销毁链表. 关键思路:(1)将结点创建结构体:(2)链表中添加头结点,以便统一操作:(3)使用结点一级指针和二级指针的异同点:(4)链表的最小操作单位是结点:(5)操作的起始位置是头结点还是第一个结点,及起始索引是0还是1. #include <stdio.h…
题目:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is. You may not alter the values in the nodes, only…
非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p->pNext = q; // q保存了那一块结点的地址.q是一个指针变量,存放那个结点的地址.q->pNext = r; 第二种表示方法:q->pNext = p->pNext; // q的指针域指向p后面一个结点p->pNext = q; // p的指针域指向q 删除非循环单链表结点…
//让树所有叶子节点连成一个单链表,让rchild作为 next指针 LNode *head=null,*pre=null;//全局变量 LNode *InOrder(BTNode *T){ if(T!=null){ InOrder(T->lchild); if(T->lchild==null && T->rchild==null){ if(pre==null){ pre=T; head=T; }else{ pre->rchild=T; pre=T; } } InO…
单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据.自己手动写一个单链表:首先,定义一个节点类: package com.wei; public class Link { public int data;// 存放数据 public Link next;// 存放下一个节点 public Link(…
各位看官们,大家好.从今天開始,我们讲大型章回体科技小说 :C栗子.也就是C语言实例.闲话休提, 言归正转. 让我们一起talk C栗子吧! 看官们,上一回中咱们没有说详细的样例,并且是说了样例中的文件组织结构.这一回咱们继续说C样例. 说的样例是链表,更准确的说法叫作单链表.咱们不但要说C样例,并且会在样例中使用上一回中说过的 文件组织结构,就当作是举例说明文件组织结构的用法. 有点一石二鸟的感觉,哈哈. 链表定义 看官们,所谓的链表事实上就是一组元素通过一定的方式链接在一起.比方我们坐的火车…
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.LinkList这样方便理解 void Show_Help(); //初始化线性表 void InitList(LinkList *L); //销毁线性表 void DestroyList(LinkList *L); //清空线性表 void ClearList(LinkList *L); //线性表是…
线性表包含两种存储方法:顺序存储结构和链式存储结构,其中顺序表的缺点是不便插入与删除数据. 单链表:每个结点包含两部分:数据域+指针域,上一个结点的指针指向下一结点,依次相连,形成链表.特别注意的是每个链表必须包含头结点(数据域一般无意义或者为空,有时用来存储链表长度等等) 下面的代码实现链表的基本操作和辅助操作,基本操作指的是插入数据.删除数据.查找数据.求链表长度:而辅助操作指的是创建结点.创建(初始化 )链表.判断是否为空链表.和其他语言不同之处是Go语言具有垃圾自动回收的特性,因此不需要…
大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解指针与结构体的运用.废话不多说,上代码! 初始化 typedef struct Node { int data; struct Node *next; } ListNode; ListNode* InitLink() { //初始化,创建头结点 ListNode *Head = (ListNode*)malloc(sizeof(ListNode)); Head->next = NULL; return He…
1 //c语言单链表 2 #include <stdio.h> 3 #include <stdlib.h> 4 typedef struct Node 5 { 6 int data;//数据域 7 struct Node *pNext;//指针域 8 }NODE,*PNODE;////NODE等价于struct Node PNODE等价于struct Node * 9 //函数声明 10 PNODE create_list();//创建链表 11 void traverse_lis…
单链表的应用非常广,它可以实现栈,队列等: Problem 我对学习任何东西都希望能找到尽可能简单的例子,而不是看起来好高大上的: 对链表这样简答的数据结构,有些书也是写得太过“完美”啦: 初学者很难抓住重点,反正我初学的时候就是看不懂: 因此我打算从简单入手去演示: 我们需要实现下面图这样的结构,叫做链表哈: Solution 首先咱们要想到这几个ABC圆圈可以代表一个数据的节点,什么是节点呢?: 节点就好比是几个同学聚集到一个宿舍一样,他们各自有各自的身高体重: 因此,我们需要一个结构体,声…
      单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决.       首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递推,直到第二个节点指向第一个节点,第一个节点的 next 指针指向 NULL.       第一种方法:       在链表往前走的过程中,记录前一个节点,当前节点和后一个节点,并使当前节点的 next 指针指向前一个节点,直到最后一个节点指向倒数第二个节点       算法实现如下: void reve…
昨天周末给学妹讲了一些指针的知识,本来我对指针就是似懂非懂的状态,经过昨天一讲,我对指针的学习就更深刻了 果然给别人讲课也是学习的一个方法.加上最近复习数据结构,发现我的博客里没有链表的博文,所以趁这时候加上一篇. 在此之前,我们先谈一下我要说的一些基本知识: ①函数参数为什么是双指针? 我们先写一下这么一个程序: # include<stdio.h>void Gai(int m){ m=5;}int main(void){ int a=1; Gai(a); printf("%d\n…
单链表,节点只有一个指针域的链表.节点包括数据域和指针域. 因此用面向对象的思维,节点类的属性就有两个:一个data(表示存储的数据),一个指针next(链表中指向下一个节点). 链表一个很重要的特性,就是这个头节点$head.它绝对不能少,每次遍历都要从它开始,并且不能移动头节点,应该用一个变量去代替他移动.脑袋里要有链表的结构.这是关键. 来一段代码: <?php class Node{ public $data = ''; public $next = null; function __c…
/* * 构造一个链式存储的线性表(当输入9999时,结束构造过程),然后输出该线性表 * 并统计该线性链表的长度 . *注:new和delete是C++的运算符 malloc和free是C++/C的标准库函数 */ #include<stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 //单链表的存储结构 struct LinkNode{ int data; //节点的数据域 struct LinkNode…
对单链表进行增删改查是最主要的操作.我在上一篇博客<C语言实现链表节点的删除>实现了删除单链表中的某个节点. 这里我们要来实如今某个位置插入节点.演示样例代码上传至https://github.com/chenyufeng1991/InsertList  . 核心代码例如以下: Node *InsertToPosition(Node *pNode,int pos,int x){ if (pos < 0 || pos > sizeList(pNode) ) { printf(&quo…
C语言在实现单链表存储时需要注意的几点: 1.定义结构体,typedef:用于给结构体另命名 // 定义结构体类型 typedef struct Node{ int data; struct Node *next; }Node,*LinkedList; 2.链表初始化 // 链表初始化 LinkedList LinkedListInit(){ Node *Head,*L,*LNew; // 申请节点空间 Head = (Node *)malloc(sizeof(Node)); // 判断是否有足…
#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode *next; }LNode, *LinkList; void GetElem_L(LinkList L,int i,int e){ //L为带头结点的单链表的头指针. //当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR LNode *p = L->next;; while(p&&j…
单链表的遍历,逆序,插入,删除 #include<stdio.h> #include<stdlib.h> #include <string.h> #define bzero(a, b) memset(a, 0, b)//windows平台下无bzero函数. 增加宏拓展移植性 struct node { int data; //有效数据 struct node *pNext;//指向下一个节点的指针 }; struct node * make_node(int data…
1.为什么写这个随笔? 前几天参加一个电面,被问到这个问题,想总结一下. 2.为什么标题强调C#? 想在网上看看代码,却没找到C#版的,于是自己用C#实现一下. 一.解决问题的思路 1.一种比较耗空间的做法是,从头开始遍历链表,把每次访问到的结点存入一个集合(hashset)或字典(dictionary),如果发现某个结点已经被访问过了,就表示这个链表存在环,并且这个结点就是环的入口点. 空间复杂度为O(n),时间复杂度为O(n) 2.追赶法:使用两个slow, fast指针从头开始扫描链表.指…
/************************************************************************* > File Name: singleLineTable.c > Author: zshh0604 > Mail: zshh0604@.com > Created Time: 2014年10月15日 星期三 11时34分08秒 ******************************************************…
我们维护两个指针, 它们之间的距离为n. 然后.我将这两个指针同步地在这个单链表上移动,保持它们的距离 为n不变. 那么, 当第二个指针指到空时.第一个指针即为所求. #include <iostream> struct Node { int data; Node* next; }; void initList(Node* vNode) { for (int i=0; i < 20; ++i) { Node* TempNode = new Node; TempNode->data…
前面的版本似乎没能让项目经理满意,他还希望这个链表有更多的功能: 我们接下来要解决几个比较简单的功能: Problem 1,更加友好的显示数据: 2,能够通过名字删除节点: Solution 首先我们编写一个简单的提示信息的函数: void when(char * tips){ time_t rawtime; struct tm* timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); char * timestr = ascti…