数据结构与算法
文章平均质量分 68
sinat_35297665
这个作者很懒,什么都没留下…
展开
-
链表实现生产者消费者
这里的代码围绕一个生产者和一个消费者来分析,生产者生产一个产品,消费者才能使用一个产品,消费者和生产者是同步关系。一:不加同步互斥锁pthre#include<stdio.h> #include<stdlib.h>#include<pthread.h>typedef struct _Node{struct _Node* next;...转载 2019-07-28 21:56:29 · 300 阅读 · 0 评论 -
使用两个队列实现一个栈
http://blog.csdn.net/jiange_zh/article/details/50583370队列是先进先出,而栈是先进后出;考虑到我们取栈顶元素的便利性,我们在实现时使得栈顶等于队列头;由于栈的pop弹出栈顶元素,而队列的pop也是弹出栈顶元素,所以我们需要特别处理的是插入操作。由于往栈中添加元素相当于往队列头添加元素,因此我们需要在两个队列中转载 2018-01-05 15:23:57 · 155 阅读 · 0 评论 -
两个栈实现一个队列与两个队列实现一个栈
http://blog.csdn.net/z84616995z/article/details/19204529两个栈实现一个队列:原理方法:用一个栈为主栈,一个栈为辅助栈存放临时元素。入队:将元素依次压入主栈出队:先检测辅助栈是否为空,如果非空,那么直接弹出辅助栈顶元素,相当于出队。如果为空,那么将主栈元素倒入到辅助栈中,然后弹出辅助栈顶元素。达到先进先出的目转载 2018-01-05 14:35:09 · 193 阅读 · 0 评论 -
两个栈实现一个队列,两个队列实现一个栈
http://blog.csdn.net/zw_1510/article/details/51927554问题1:用两个栈实现一个队列,实现队列的push和delete操作 栈的特性是先进后出(FILO),队列的特性是先进先出(FIFO),在实现delete时,我们的难点是如何将栈中最底层的数据拿出来,我们有两个栈,所以我们可以将一个栈中的数据依次拿出来压入到另一个为空的栈,另一个栈中数据的顺序恰...转载 2018-01-05 14:30:21 · 181 阅读 · 0 评论 -
【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
http://blog.csdn.net/hanjing_1995/article/details/51539578使用两个栈实现一个队列思路一:我们设定s1是入栈的,s2是出栈的。入队列,直接压到s1即可出队列,先把s1中的元素倒入到s2中,弹出s2中的栈顶元素;再把s2的剩余元素全部倒回s1中。转载 2018-01-05 14:09:14 · 238 阅读 · 0 评论 -
【数据结构与算法】内部排序之三:堆排序(含完整源码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20227303前言 堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用到的操作。比如我们建堆的时候可以采用堆转载 2018-01-05 11:03:10 · 145 阅读 · 0 评论 -
尹成 双循环链表
今天,我们一起用C++写一个双链表,具体代码如下:DoubleList.h具体内容如下:[cpp] view plain copy#include "NodeList.h" templatetypename Type> class DoublyList{ public: DoublyList() :h转载 2017-12-23 23:45:13 · 161 阅读 · 0 评论 -
两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/701572271两个栈实现一个队列1.原理分析:队列的主要操作有两个:入队操作和出队操作,出队时从队头出,入队是从队尾插入,入队的操作和入栈的操作类似,而最关键的问题是出队操作,要出队列的是队列的第一个元素,而出栈的是栈的栈顶元素,所以我们可以这样:转载 2017-12-13 17:21:28 · 154 阅读 · 0 评论 -
C语言单链表实现19个功能完全详解
https://www.cnblogs.com/renyuan/archive/2013/05/21/3091506.html#include "stdafx.h"#include "stdio.h"#include #include "string.h" typedef int elemType ; /************************************转载 2017-12-20 17:29:21 · 162 阅读 · 0 评论 -
数据结构练习——双向链表
http://www.cnblogs.com/-Lei/archive/2012/04/10/2440399.html复习一下数据结构。。。。说不准下个星期就用上了只不过写的很简单,没有封装DoubleLinkList.h#ifndef GUARD_DoubleLinkList_h#define GUARD_DoubleLinkList_h#inclu转载 2017-11-23 21:11:25 · 202 阅读 · 0 评论 -
用模板写单链表 尹成
转载:http://blog.csdn.net/itcastcpp/article/details/39081953为了加深对模板的理解,我们今天一起用模板写一个单链表,希望通过这个例子,能够帮助大家加深对模板的体会,具体如下:SList.hpp内容:[cpp] view plain copy#ifndef _SLIST_转载 2017-10-13 18:05:31 · 167 阅读 · 0 评论 -
数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
http://blog.csdn.net/abclixu123/article/details/8210109链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的。在C语言中,链表是通过指针相关实现的。而单链表是链表的其中一种,关于单链表就是其节点中有数据域和只有一个指向下个节点的指针域。创建单链表的方法有两种,分别是头插法和尾插法。所谓头插法,就是按节点的逆序方法转载 2017-11-16 21:57:25 · 919 阅读 · 0 评论 -
约瑟夫问题
http://www.cnblogs.com/eniac12/p/5407503.html约瑟夫问题的提法:n个人围成一个圆圈,首先第1个人从1开始,一个人一个人的顺时针报数,报到第m个人,令其出列;然后再从下一个人开始,从1顺时针报数,报到第m个人,再令其出列,…,如此下去,直到圆圈中只剩一个人为止,此人即为优胜者。 例如 n = 8 m = 3转载 2017-11-14 21:14:22 · 320 阅读 · 0 评论 -
用C++实现单链表的创建、逆置和输出 的两种方法
http://blog.csdn.net/lfeng_coding/article/details/47300563题目描述:在已知单链表头节点的情况下,设计算法逆置单链表并输出方法一:采用首先将头节点指向空,让其变为尾节点,然后利用中间节点 p、q 将其后的节点一个接一个改为指向前面的节点/***************************转载 2017-11-18 22:24:41 · 633 阅读 · 0 评论 -
链表逆序的原理及实例
http://blog.csdn.net/wangqing_12345/article/details/51757294尾插法建立链表,带头结点设链表节点为typedef struct node { int data; struct node *next;}node_t, *pnode_t;要求将一带链表头List head的单向链表逆序转载 2018-01-24 22:59:14 · 600 阅读 · 0 评论 -
C语言链表各类操作详解
http://blog.csdn.net/pf4919501/article/details/38818335 链表概述 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址...转载 2018-02-26 23:18:01 · 1225 阅读 · 1 评论 -
数据结构之自建算法库——链栈
http://blog.csdn.net/sxhelijian/article/details/48463801本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链栈算法库采用程序的多文件组织形式,包括两个文件: 1.头文件:listack.h,包含定义链栈数据结构...转载 2018-03-06 22:55:29 · 215 阅读 · 0 评论 -
一个通用纯C队列的实现
https://blog.csdn.net/kxcfzyk/article/details/31728179队列并不是很复杂的数据结构,但是非常实用,这里实现一个队列是因为在我的另一篇博客非常精简的Linux线程池实现中要用到。 队列API定义如下: //queue.h #ifndef QUEUE_H_INCLUDED #define Q...转载 2018-07-24 00:30:14 · 1974 阅读 · 0 评论 -
单链表各种操作详解
#include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef ...转载 2018-07-11 16:00:55 · 204 阅读 · 0 评论 -
单链表逆序的多种方式
template<class T>void List<T>::Inverse() { if(first == NULL) return; LinkNode<T> *p, *prev, *latter; p = first->link; // 当前结点 prev = N...转载 2018-07-11 12:17:25 · 532 阅读 · 0 评论 -
转圈踢人问题
https://www.cnblogs.com/lanxuezaipiao/p/3339603.html有N个人围一圈依次报数,数到3的倍数的人出列,问当只剩一个人时他原来的位子在哪里?解答:经典的转圈踢人问题,好吧专业一点,约瑟夫环问题,相信大家都会,下面给我的code:int main(){ int N, i, j; printf("Please enter the num...转载 2018-06-25 23:48:23 · 262 阅读 · 0 评论 -
约瑟夫环(c语言程序完整版)
https://blog.csdn.net/m_hahahaha1994/article/details/51742453约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include<stdio...转载 2018-06-20 22:36:15 · 2373 阅读 · 0 评论 -
数据结构实验之链表七:单链表中重复元素的删除
https://blog.csdn.net/blessingxry/article/details/794455111.知识点:逆序建立链表+节点删除 2.题意:按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个) 3.注意事项:节点删除时若删除节点为尾节点的情况代码:#include <stdio.h>#include &l...转载 2018-06-13 00:31:54 · 267 阅读 · 0 评论 -
C语言itoa()函数和atoi()函数详解(整数转字符C实现)
https://www.cnblogs.com/bluestorm/p/3168719.htmlC语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。...转载 2018-06-04 16:30:55 · 171 阅读 · 0 评论 -
剑指offer面试题:替换空格
https://blog.csdn.net/yanxiaolx/article/details/52235212 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。解析:时间复杂度为O(n)的解法。完整代码及测试用例实现:[cpp] view plain copy#include<iostream...转载 2018-06-04 16:14:00 · 164 阅读 · 0 评论 -
【笔试常考】C语言:深度剖析strlen,sizeof
https://blog.csdn.net/hanjing_1995/article/details/51539532 在之前的博客中,我也探索过strlen,sizeof区别,详情可见博客http://10740184.blog.51cto.com/10730184/1705820。 关于strlen,sizeof均可求字符串长度,这两者是笔试面试常考的知识点。[cpp] view pla...转载 2018-06-04 15:54:33 · 172 阅读 · 0 评论 -
【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)
https://blog.csdn.net/hanjing_1995/article/details/51539583strcpy拷贝源字符串到子字符串,包括‘\0’。代码实现:[cpp] view plain copychar* strcpy(char* dst,const char* src) { assert(src); char* ret = dst; wh...转载 2018-06-04 15:47:16 · 188 阅读 · 0 评论 -
【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)
https://blog.csdn.net/hanjing_1995/article/details/51539599从尾到头打印单链表[cpp] view plain copyvoid FromTailToHeadPrint(SListNode*& head) { stack<SListNode*> s; SListNode* cur = head; ...转载 2018-06-04 15:30:29 · 160 阅读 · 0 评论 -
数据结构实验之链表七:单链表中重复元素的删除
https://www.cnblogs.com/6bing/p/3931259.html题目描述按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。输入第一行输入元素个数n; 第二行输入n个整数。输出第一行输出初始链表元素个数; 第二行输出按照逆位序所建立的初始链表;第三行输出删除重复元素后的单链表元素个数;第四行输出删除重复元素后的单链...转载 2018-05-26 19:53:19 · 544 阅读 · 0 评论 -
单链表 冒泡排序
https://github.com/chenyufeng1991/BubbleSortLinkedList_HeadNode/blob/master/BubbleSortLinkedList_HeadNode/main.c// // main.c // BubbleSortLinkedList_HeadNode // // Created by chenyufeng on 16/3/1. ...转载 2018-05-11 21:38:35 · 679 阅读 · 0 评论 -
链栈基本操作
http://blog.csdn.net/jwentao01/article/details/46765517###;栈基本概念: 栈(stack)是限定在表尾进行插入和删除操作的线性表(或单链表)。 //只能在一段进行插入和删除,因此不存在,在中间进行插入 栈顶(top):允许插入和删除的一端。而另一端称为栈底(bottom) 空栈:不含任何数据元素的栈。 后进先出两个基本操作: 栈的插入操作(...转载 2018-03-08 20:52:39 · 13452 阅读 · 0 评论 -
链队 尹成
http://blog.csdn.net/itcastcpp/article/details/39271691 今天,我们一起用C++写一个链对,具体如下所示。LinkQueue.h具体内容如下:[cpp] view plain copy#include "QueueNode.h" templatetypename转载 2017-11-17 23:24:39 · 214 阅读 · 0 评论 -
链栈 尹成
http://blog.csdn.net/itcastcpp/article/details/39271661今天,我们一起用C++写链栈,具体如下。LinkStack.h具体内容:[cpp] view plain copy#include "StackNode.h" templatetypename转载 2017-11-17 00:03:06 · 197 阅读 · 0 评论 -
数据结构--顺序栈和链式栈
http://www.cnblogs.com/jingliming/p/4602458.html栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈,栈又称为后进先出的线性表,栈也有两种表示:顺序栈与链式栈顺序栈是利用一组地址连续的存储单元,依次存放从栈底到栈顶的数据元素,附设一个指针指示栈顶的元素在栈中的位置。转载 2017-10-26 21:21:48 · 396 阅读 · 0 评论 -
(C++版)链表(二)——实现单项循环链表创建、插入、删除等操作
http://blog.csdn.net/fisherwan/article/details/25561857链表(二)单向循环链表的实现,下面实现代码:[cpp] view plain copy"font-size:18px;" deep="5">#include #include using namespace转载 2017-10-21 14:57:45 · 442 阅读 · 0 评论 -
(C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
http://blog.csdn.net/fisherwan/article/details/19701027我学习了几天数据结构,今天下午自己写了一个单向链表的程序。我也是新手,所以刚开始学习数据结构的菜鸟们(有大牛们能屈尊看一看,也是我的荣幸)可以和我一起共同学习、讨论,当然也很高兴能指出我的错误,因为这是我们一起成长的过程。本代码包含我在写程序时的一些个人理解的说明和一些注释(如转载 2017-10-21 14:54:47 · 448 阅读 · 1 评论 -
(C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19801993双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循环的链表,通过每个节点的两个指针把它们扣在一起组成一个环状。所以呢,每个节点都有前驱节点和后继节点(包括头节点和尾节点)这是和双向链表不同的地方。我们看下双向循环链表的示意图(我在网上找了张转载 2017-10-21 14:52:00 · 299 阅读 · 0 评论 -
(C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19754585昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了。链表的相关操作一样的,包含链表的创建、判断链表是否为空、计算链表长度、向链表中插入节点、从链表中删除节点、删除整个链表释放内存。如果单向链表理解了,那单向循环链表也就不难了。单向循环链表如下图所示:转载 2017-10-21 14:17:34 · 461 阅读 · 0 评论 -
(C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
http://blog.csdn.net/fisherwan/article/details/25557545前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了,所以现在打算用C++再实现一遍,由于初次用C++实现,存在错误的地方还望大家指针。下面就直接上代码:[cpp] view plain copy转载 2017-10-21 14:06:49 · 463 阅读 · 0 评论 -
(C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19760681上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了。其实双向链表和单向链表也是有很多相似的地方的,听名字可以猜到,每个节点都包含两个指针,一个指针指向上一个节点,一个指针指向下一个节点。这里有两个特殊的地方,第一就是头节点的一个指针指向NULL空指针(没有前驱节点)转载 2017-10-21 13:55:41 · 254 阅读 · 0 评论