数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
///dabbysunshine@qq.com
/**
《数据结构》严蔚敏.吴伟民P63-65.循环队列
**/
///如有BUG,请发邮件联系
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//#include "malloc.h"
//#include <iostream>
//usin
【摘要】: 本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。 【关键字】:双向循环链表,list,list_entry,typeof,containerof,list_for_each,list_for_each_entry 1、双
总的来说,这个程序运行得不错,可以任意修改迷宫图,但是有一点儿毛病:第一,如果终点不可达,程序陷入循环状态。改良思想,可以写个判断终点或起点是否合法的方法。也可以给所经过的路径标记,如果所以的点都经过了,则退出程序。其次,在switch分支中,以这样的顺序:下、右、上、左 探索的话,则有些点是无法到达的,如点(18,1),这些点称为盲点,只向一个方向绕过去是永远达到 的。解决思路:让探索既向逆时针
以前写的严蔚敏《数据结构》的部分源码。 #include <stdlib.h> #include <stdio.h> #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define LISTINCREMENT 10 // 线性表存储空间的分配增量 #define OK 1; #define ERROR -1; #define OVER
学习数据结构基础,如有错误,请指正 /***
数据结构:顺序表的模拟
***/
#ifndef __SQLIST_H__
#define __SQLIST_H__
typedef int ElemType;
#define MAXSIZE 100
#define ADDSIZE 100
class SqList
{
private:
ElemType *elem;
int longth
学习数据结构基础,如有错误,请指正 /***
数据结构:栈的模拟
***/
#ifndef __STACK_H__
#define __STACK_H__
#define MAXSIZE 100
typedef char ElemType;
typedef struct{
ElemType *top;
ElemType *base;
int stackSize;
} sqStack;
学习数据结构基础,如有错误,请指正 /***
数据结构:队列的模拟,创建、销毁、进队列、出队列
打印输出字符,模拟先进现出特性
***/
#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
typedef char ElemType;
struct LinkNode{
ElemType data;
LinkNode *next;
};
clas
学习数据结构基础,如有错误,请指正。 /************************************************************************
数据结构:二叉树的实现,创建、先序、中序、后序遍历(递归实现)
*********
上代码,自己模拟 #include<iostream>
using namespace std;
struct node
{
int data;
node *next;
} ;
void search(node *,node *);
void insert(node *,node *);
void insert(node *,node *,node *);
void print(node *)
题目(出自《C++程序设计基础》): 建立一个结点包括职工的编号、年龄和性别的单向链表,分别定义函数完成以下功能: (1)遍历该链表输出全部职工信息; (2)分别统计出男女性职工的人数; (3)在链表尾部插入新职工结点; (4)删除指定编号的职工结点; (5)删除年龄在60岁以上的男性职工或55岁以上的女性职工结点,并保存在另一个链表中。 用主函数建立简单菜单选择,测试你的程序。 不多说,上自己的
学习数据结构基础,如有错误,请指正。 (图的广度优先遍历算法部分,存在错误,请高手帮小弟看下) /************************************************************************
数据结构:图的实现,并对其进行深度优先、广度优先遍历
**************************************************
学习数据结构基础,如有错误,请指正。 /***********************************************
【查找和排序】 几种常见的查找和排序算法
***********************************************/
#include <iostream>
// 顺序查找
int squ_search(int array[],int co
大二上学期开设的课程。 第01页: 第02页: 第03页: 第04页: 第05页: 第06页: 第07页: 第08页: 第09页: 第10页: 第11页: 第12页: 第13页: 第14页: 第15页: 第16页: 第17页: 第18页:
排序算法在面试中是常见的,尤其是(插入排序,冒泡排序和快速排序),就抽个时间再复习一下排序算法吧 插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插入到前面已经排序的序列中的适当位置,直到每个记录都插入完毕为止。 1:直接插入排序 这是一种最简单的排序方法,它的基本思想是将待排序的记录分成两个部分,第一个部分已经排好序,第二个部分未排序好。排序中,每次都是从
1、调用子程序的含义: 在过程和函数的学习中,我们知道调用子程序的一般形式是:主程序调用子程序A,子程序A调用子程序B,如图如示,这个过程实际上是: @当主程序执行到调用子程序A语句时,系统保存一些必要的现场数据,然后执行类似于BASIC语言的GOTO语句,跳转到子程序A(为了说得简单些,我这里忽略了参数传递这个过程)。 @当子程序A执行到调用子程序B语句时,系统作法如上,跳转到子程序B。
上一次学习了【【数据结构】排序算法(一)之直接插入排序,冒泡排序】今天重新学习了一下快速排序 快速排序是是属于交换排序的范畴,另外一种的交换排序的代表是冒泡排序(上面有冒泡排序的链接地址) 快排的基本思路其实还是挺简单的:我们从需要排序的数组从任取一个当做分界值(暂时称作n),把所有比n小的值放在n的左边,把大的放在n的右边。这样进行遍历一遍下来,就可以形成左右两个序列,左边的
////2012.03.26 by zhengshihao
#include<stdio.h>
#define GRAPHMAX 10
#define FALSE 0
#define TRUE 1
#define Error printf
#define QueueSize 30
typedef struct
{
char vexs[GRAPHMAX];
int edges[GRAPHM
散列方法不同于顺序查找、二分查找、二叉排序树及B-树上的查找。它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,无须任何比较就可以找到待查关键字,查找的期望时间为O(1)。 散列表的概念 1、散列表 设所有可能出现的关键字集合记为U(简称全集)。实际发生(即实际存储)的关键字集合记为K(|K|比|U|小得多)。 散列方法是使用函数h将U映射到表T[0..m-1]的下
《数据结构》第01章在线测试 剩余时间: 答题须知:1、本卷满分20分。 2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。 3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。 错误列表: 1.4 2.3 2.5 第一题、单项选择题(每题1分,5道题共5分) 1、在线性结构中,除最后一个以外的其余结点有_B___
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html 顺序栈各种基本运算算法的实现 栈是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底(push),最后的数据在栈顶(top),需要读数据的时候从栈顶开
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html 顺序队列各种基本运算算法的实现 顺序队列是较为普遍的一种队列实现方式,采用环状数组来存放队列元素,并用两个变量分别指向队列的前端(front)和尾端(rear),往队列中加进或取出元素时分
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html 链式栈各种基本运算算法的实现 栈是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底(push),最后的数据在栈顶(top),需要读数据的时候从栈顶开
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html 链式队列各种基本运算算法的实现 队列是一种先进先出的线性表。就如同现实中的排队,先来的先服务。通过基本的append()将元素加入队列,serve()将元素移出队列。 链式队列是不同于循环
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://www.voidcn.com/article/p-srsfcefa-vo.html 查找算法 查找算法是在存在的序列(list) 中查找特定的目标(target),要求序列中每个记录必须与一个关键词(key)关联才能进行查找。 查找算法通常需要两个输入: 1、被查找的
#include <stdio.h>
/* C:
* 参照《数据结构》(C语言版)
* 调用:quicksort-->qsort-->partitions
* 原理,通过一趟扫描将要排序的数据分割成独立的两部分,
* 其中一部分的所有数据都比另外一部分的所有数据都要小,
* 然后再按此方法对这两部分数据分别进行快速排序,
* 整个排序过程可以递归进行,以此达到整个数据变成有序序列
常用数据结构 数组 (Array) 在程序设计中,为了处理方便, 把具有相同类型的若干 变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为 数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、 指针数组、结构数组等各种类别。 栈 (Stac
话说这题想了好久啊,昨晚想到12点半还没想出来,一开始想用一次增广费用流,然后用O(1)的时间统计,不过有几个地方有bug,发现这样只能算出近似结果,最多不相差1,无法处理什么地方需要减1,然后就跪了,看了题报告才知道是一道数据结构题,一个类似rmq的思想就能解决这个问题,好吧~ #include<iostream>
#include<vector>
#include<algorithm>
#in
感觉用C++中的构造函数、析构函数等类的特点来描述一些数据结构更加易读,更加合理,便捷。但有一个问题,编译器不支持模板的分离编译,很不舒服 #include <iostream>
using namespace std;
template<class T>
class CArray
{
public:
CArray(const int &iMax);
CArray();
~CArray
插入、删除结点的代码有点多,但这样提高了代码的可读性,且不增加时间复杂度,不会影响程序性能 #include <iostream>
using namespace std;
template<typename T>
class CList;
template<class T>
class Node
{
friend CList<T>;
private:
T m_data;
Node *m
循环队列满时,数组中还有一个空的单元。如图4-12-8所示,我们认为,队列已经满了,也就是说,我们不允许出现4-12-7的右图情况出现。 队列满的条件是: (rear+1)%QueueSize == front 通用的计算队列长度的公式为: (rear - front+ QueueSize)%QueueSize