C语言初级链表(之有头节点的单向链表)

1.结构体的基本特点:(结构体中可以嵌套一个别的结构体;  ..........可以嵌套一个别的结构体指针)

          (结构体中不可以嵌套一个自身类型的结构体(原因:确定不了结构体的内存大小);

             ..........可以嵌套一个指向自身类型的指针(原因:不同类型的指针在同一操作平台下所占内存相同,有确定值)

2.数据类型的本质:固定大小的内存块别名。

3.链表的基础特点:(结构体; 两个域:数据域、指针域;  引用自身的结构体;  特点:非线性存储)

4.链表编程关键两点:

    1)指针指向谁,就把谁的地址赋给指针

    2)辅助指针变量&操作逻辑的关系(辅助指针:pHead(头节点)  pPre(前驱结点)  pCur(当前结点)  pM(业务节点))

还未写完,下午继续;

时间: 2024-11-10 08:19:53

C语言初级链表(之有头节点的单向链表)的相关文章

无表头单链表的总结----增加节点(原链表为有序的链表)

1 #include"head.h" 2 struct Student* insert(struct Student*head, struct Student*addinfo) 3 { 4 struct Student *p0, *p1, *p2; //开辟三个结构体指针 5 p2=p1 = head; //头指针赋给p1,p2 6 p0 = addinfo; //把 增加信息的指针赋给p0,习惯不用原来指针 7 if (head == NULL) 8 { 9 head = p0 //

单向链表的删除及插入操作(以头插入法建立单向链表)

注意插入和删除操作中的限制约束条件. class ListNode { ListNode next; int val; public ListNode(int x) { val = x; } } public class LinkList { private ListNode curr = null; public void appendToHead(int d) { ListNode tail = new ListNode(d); tail.next = curr; curr = tail;

删除一个没有头节点链表中的某个节点

题目描述:给定一个链表,没有头节点,如何删除其中的某个随机节点呢? 分析:如果一个链表没有头节点的话,那么我们就不可以找到被删除节点的前面一个节点.如何按照这个思路来,就无法实现功能了. 不如我们换一个思路,删除节点的目的是什么?是要达到被删除节点中的data被删除,也就是说,我们实际上只需要删除该节点的data,而不是整个节点.如何实现呢?我们可以把需要删除节点的后面一个节点中的data,依次往前面赋值,并把此节点删除,即可.例如:ABCD三个节点,假如我们需要删除B节点,那么我们可以把C->

写给过去的自己-No.1-数据结构篇-单向链表C语言的实现

过去的自己,你好.     今天我来教你单向链表,不知道你何时会看到这篇文章,也不知道你此刻对C语言的掌握,我会尽可能讲解细一点.     讲链表之前我先讲一下数组.相信你不管怎样肯定用过数组对吧,数组就是一种数据的组织形式,特点是所有的数据在逻辑上是顺序摆放的,通过数组名和数组下标 就可以找到某个元素,而且在内存中存放的物理地址也是连续的,定义数组时,一旦中括号中的数字确定了,数组中元素个数也就确定了.那么问题来了,因为数组 的大小需要提前确定,所以定义数组时必须统计好程序中用了多少元素,用多

单链表快排 改变节点位置

快速排序2(算法交换链表节点,平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1)) 这里的partition,我们选取第一个节点作为枢纽元,然后把小于枢纽的节点放到一个链中,把不小于枢纽的及节点放到另一个链中,最后把两条链以及枢纽连接成一条链. 这里我们需要注意的是,1.在对一条子链进行partition时,由于节点的顺序都打乱了,所以得保正重新组合成一条新链表时,要和该子链表的前后部分连接起来,因此我们的partition传入三个参数,除了子链表的范围(也是前闭后开区间)

带头节点的单链表的插入操作

1.偶然看到了十字链表的应用,想到之前在<数据结构与算法分析>的链表一章中,需要用多重表实现一个简单的查询功能.功能需求如下: “已知 学生 和 学校课程 总数 分别为 40000 和 2500,现在需要得到两份报告,一份显示每门课成注册的所有学生信息, 一份显示每个学生注册了哪些课程.” 显然可以用一个 40000 * 2500 个元素的二维数组来解决,但是每个学生选课数目很少,因此会浪费很多空间.因此选择十字链表来实现. 既然是链表,那么肯定要有插入操作,于是便有了本文.算是对功能实现前的

数据结构和算法之单向链表二:获取倒数第K个节点

我们在做算法的时候或多或少都会遇到这样的问题,那就是我们需要获取某一个数据集的倒数或者正数第几个数据.那么今天我们来看一下这个问题,怎么去获取倒数第K个节点.我们拿到这个问题的时候自然而然会想到我们让链表从末尾开始next   K-1 次不就是第K-1个节点了么,但是必须要注意一点,这是单向链表.那么这时候的解决思路或许就会出现分歧,大多数人都会想到我们遍历一下链表,获取链表的长度,然后再减去 K 长度的节点,那么我们这个链表的最后一个节点就是原链表的倒数第K个节点:我们看一下实现代码: /**

C语言 单向链表

1.单向链表的定义 struct student { char name[10]; float score; struct student *next; }; next作为同类型指针,指向与它所在节点一样的节点. 2.单向链表的基本操作 1)建立链表 int main() { /*定义结构指针,pnew指向新节点,head指向头节点,tail指向尾节点*/ struct student *pnew, *head, * ptail; /* 动态分配库函数malloc,分配长度为sizeof(str

[华为机试练习题]24.删除链表中的反复节点、剩余节点逆序输出

题目 描写叙述: 题目描写叙述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容反复的节点(反复的节点所有删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容反复的节点(反复的节点所有删除).剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]仅仅须要完毕该函数功