数据结构
九零后的鹏鹏
这个作者很懒,什么都没留下…
展开
-
单链表的增删查
#pragma once#include<stdio.h>#include<Windows.h>#include<assert.h>#include<stdlib.h>typedef int DataType;typedef struct SListNode{ DataType data; struct SListNode *pN...原创 2018-06-22 20:52:48 · 102 阅读 · 0 评论 -
复杂链表的复制
题目:复杂链表的复制。一个链表的每个节点,有一个指向next指针指向下一个节点,还有一个random指针指向这个链表中的 一个随机节点或者NULL,现在要求实现复制这个链表,返回复制后的新链表。解题思路: 题目中不仅仅要复制指向next指针的节点,还要复制random指针指向这个链表的随机节点或NULL,所以我们要考虑很多的情况,并且还要将一个指针所有的指向都复制下来,如下...原创 2018-06-18 19:02:01 · 117 阅读 · 0 评论 -
逆置打印链表
题目:将一个单链表逆置输出解题思路:思路一:先找到最后一个,打印最后一个,然后指向链表最后一个指针前移,知道遇到链表第一个节点。时间复杂度O(n^2),空间复杂度O(1)void PrintTail(SListNode *pFirst){ SListNode *end = NULL; while (end != pFirst){ SListNode *pNode = pFirst; ...原创 2018-06-18 19:06:55 · 143 阅读 · 0 评论 -
删除一个无头单链表的非尾节点(不能遍历单链表)
题目: 删除一个无头单链表的非尾节点(不能遍历单链表)解题思路:首先这个单链表是无头的,所以不能从头开始,也不能遍历单链表。只是给定一个节点,要删除一个节点,首先需要找到上一个节点,但是因为是无头的,所以我们无法知道给定节点的上一个节点,所以就不能去删除给定的节点,但是我们可以去删除给定节点的后一个节点。如下图:为替换法删除代码实现:void DelNode(SListNode *pPos...原创 2018-06-18 19:18:34 · 293 阅读 · 0 评论 -
在无头单链表的一个节点前插入一个节点(不能遍历链表)
题目:在无头单链表的一个节点前插入一个节点(不能遍历链表)解题思路:因为是无头节点,所以我们不知道给定位置之前的值。所以只能在给定位置pos之后插入。首先先申请一个节点空间,将新节点插入到给定位置pos的后面,然后将给定节点pos的值赋给新节点,然后再将要插入的值赋给pos。如下图:代码实现:void InsertNode(SListNode *pos,DataType data){ asse...原创 2018-06-18 19:34:13 · 617 阅读 · 0 评论 -
单链表实现约瑟夫环
题目:单链表实现约瑟夫环约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列解题思路:将链表构成一个环,然后开始数数,数到那个数,就删掉,然后继续数,直到剩一个人代码实现:SListNode *JosephCycle(SListNode *...原创 2018-06-18 19:38:20 · 206 阅读 · 0 评论 -
单链表的逆置/反转
题目:单链表的逆置/反转。解题思路:思路一:定义三个指针,n1,n2,n3,初始值分别为 :链表第一个节点,链表第二个节点,第三个节点。n2保存的是n1的地址,n3保存的是n2的地址,通过n3来往后遍历,直n2为空,这时n1指向最后一个元素,这时返回n1,就可以逆置链表如下图:代码实现:SListNode *reserveNode(SListNode *pFirst){ SListNode *...原创 2018-06-18 19:55:37 · 547 阅读 · 0 评论 -
单链表实现冒泡排序
题目:单链表实现冒泡排序解题思路:定义三个指针:pNode指向链表头,next指向第二个元素,tail指向的每轮结束的位置,开始为NULL。然后比较pNode和next的值,大就交换,当next为空时第一轮结束,记录这个位置,下一趟排序只要next遇到这个位置就结束。代码实现:void BubbleNode(SListNode *pFirst){ SListNode *pNode; SLis...原创 2018-06-18 20:04:34 · 2001 阅读 · 1 评论 -
对顺序表的操作:增删查
1.顺序表的增加:分为三种情况:尾插,头插,按位置插>尾插:依次将数据插入到上一个数据的后面,有效元素个数应小于数组长度:void SeqListPushBack(SeqList *pSL,DataType data){ assert(pSL); assert(pSL->size < MAX_SIZE); pSL->array[pSL->size] = dat...原创 2018-06-19 13:41:08 · 583 阅读 · 0 评论