数据结构和算法
djcsch2001
这个作者很懒,什么都没留下…
展开
-
双向链表
#include#include#define ERROR 0#define OK 1#define EQUAL 1#define OVERFLOW -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10struct STU{ char name[20]; char stuno[10]; int age; int score;}st原创 2009-03-07 11:44:00 · 303 阅读 · 0 评论 -
线索二叉树
线索二叉树-概念 当用二叉链表作为二叉树的存储结构时,因为每个结点中只有指向其左、右儿子结点的指针,所以从任一结点出发只能直接找到该结点的左、右儿子。在一般情况下靠它无法直接找到该结点在某种遍历序下的前驱和后继结点。如果在每个结点中增加指向其前驱和后继结点的指针,将降低存储空间的效率。我们可以证明:在n个结点的二叉链表中含有n+1个空指针。因为含n个结点的二叉链表中含有原创 2009-03-27 21:37:00 · 623 阅读 · 0 评论 -
广义表
广义表,顾名思义,它也是线性表的一种推广。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。在第二章中,线性表被定义为一个有限的序列(a1,a2,a3,…,an)其中ai被限定为是单个数据元素。广义表也是n个数据元素d1,d2,d3,…,dn的有限序列,但不同的是,广义表中的di原创 2009-03-27 21:41:00 · 768 阅读 · 0 评论 -
二叉树
#include "stdio.h"typedef char ElemType;typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;}BiTNode;void preorder(BiTNode *bt){ if(bt!=NULL) { printf("%c ",bt->data);原创 2009-03-27 21:46:00 · 332 阅读 · 0 评论 -
查找
查找,也称为检索,是计算机操作中最普通最费时的操作之一。所谓查找,就是根据给定的值(target),在一个表中查找出等于target的数据元素,若表中有这样的元素,则称查找是成功的,并指出该元素在表中的位置;若表中不存在这样的元素,则称查找是不成功的,或称查找失败,并且给出相应的提示。在日常生活中,有许许多多查找的实例。如在通讯录中查找某人的地址、电话号码;在书目中查找《数据结构》书等。本原创 2009-04-04 20:59:00 · 389 阅读 · 0 评论 -
哈希表查找
//有个例子,参考一下;#include #include #include #include #define N 30#define L 38#define P 37typedef struct { char *name; char *py; int k;}old;old oldlist[N];typedef struct { char *name; c原创 2009-04-04 21:09:00 · 1109 阅读 · 1 评论 -
排序
各种排序方法的综合比较结论: 排序方法 平均时间 最坏时间 辅助存储 简单排序 O(n2) O(n2) O(1) 快速排序 O(nlogn) O(n2) O(logn) 堆排序 O(nlogn) O(nlogn) O(1) 归并排序 O(nlogn) O(nlogn) O(n) 基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)另外:直原创 2009-04-04 21:05:00 · 330 阅读 · 0 评论 -
关于软件考试的一道C语言的解析
对于2009年上半年软件设计师下午试题的一个分析,对于第五个空很多网上给出的答案都是ptr->rchild,本人认为应为q->elem->rchild,因为此时ptr已为空,ptr->rchild会报错,以下为本人写的测试程序,在c++ builder中测试通过 //-----------------------------------------------------------原创 2009-10-17 16:35:00 · 669 阅读 · 1 评论 -
八皇后问题
八皇后问题递归算法如下,在win-tc和tc2.0下已调试通过:#include #include #define MAX 8 /* 棋子数及棋盘大小MAXxMAX */int board[MAX];/* 印出结果 */void show_result(){ int i; for(i=0;i转载 2011-03-17 20:40:00 · 459 阅读 · 0 评论 -
N皇后问题
<br />#include <cstdlib><br />#include <iostream><br /><br />using namespace std;<br /><br />bool place(int x[],int k); <br />void queen(int n,int x[]);<br />void Output(int n,int x[]); <br />int main(int argc, char *argv[])<br />{<br /> cout<<"请输入皇后的个数转载 2011-03-17 20:40:00 · 445 阅读 · 0 评论 -
十字链表
#include#include#define smax 45typedef int datatype;typedef struct lnode int i,j; struct lnode *cptr,*rptr; union { struct lnode *next; datatype v; }uval;}link;int flag=0;link *creatlinkmat(){ l原创 2009-03-21 20:45:00 · 392 阅读 · 0 评论 -
队列的实现
一、队列的定义:队列是一种先进先出的线性表。它只允许在表的一端进行插入,而在另一端删除元素。象日常生活中的排队,最早入队的最早离开。在队列中,允许插入的的一端叫队尾,允许删除的一端则称为队头。抽象数据类型队列:ADT Queue{数据对象: D={ai| ai(-ElemSet,i=1,2,...,n,n>=0} 数据关系: R1={ | ai-1,ai(- D,i=2原创 2009-03-21 14:44:00 · 667 阅读 · 0 评论 -
稀疏矩阵算法
1、稀疏矩阵的压缩存储 为了节省存储单元,可只存储非零元素。由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储非零元素所在的行号、列号,才能迅速确定一个非零元素是矩阵中的哪一个元素。稀疏矩阵的压缩存储会失去随机存取功能。 其中每一个非零元素所在的行号、列号和值组成一个三元组(i,j,aij),并由此三元组惟一确定。 稀疏矩阵进行压缩存储通常有两类方法:原创 2009-03-21 14:11:00 · 6879 阅读 · 2 评论 -
线性链表(C语言实现)
#include#include#define ERROR 0#define OK 1#define EQUAL 1#define OVERFLOW -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10struct STU{ char name[20]; char stuno[10]; int age; int score;}st原创 2009-03-06 22:39:00 · 864 阅读 · 0 评论 -
线性表的顺序表示(C语言实现)
#include#include#define ERROR 0#define OK 1#define EQUAL 1#define OVERFLOW -1#define LIST_INIT_SIZE 100#define LISTINCREMENT 10struct STU{ char name[20]; char stuno[10]; int age; int score;}st原创 2009-03-05 21:43:00 · 780 阅读 · 0 评论 -
数制转换
#include#include#define ERROR 0#define TRUE 1#define FALSE 0#define OK 1#define EQUAL 1#define OVERFLOW -1#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int SElemT原创 2009-03-09 21:38:00 · 344 阅读 · 0 评论 -
顺序栈实现
一、栈的定义栈是限定仅在表尾进行插入或删除操作的线性表。栈的表尾称为栈顶,表头称为栈底,不含元素的空表称为空栈。栈的抽象数据类型定义:ADT Stack{数据对象:D={ai|ai(- ElemSet,i=1,2,...,n,n>=0}数据关系:R1={ai-1,ai>|ai-1,ai(- D,i=2,...,n}基本操作:InitStack(&S) 构原创 2009-03-08 14:42:00 · 495 阅读 · 0 评论 -
链栈实现
一、栈的定义栈是限定仅在表尾进行插入或删除操作的线性表。栈的表尾称为栈顶,表头称为栈底,不含元素的空表称为空栈。栈的抽象数据类型定义:ADT Stack{数据对象:D={ai|ai(- ElemSet,i=1,2,...,n,n>=0}数据关系:R1={ai-1,ai>|ai-1,ai(- D,i=2,...,n}基本操作:InitStack(&S) 构原创 2009-03-08 14:43:00 · 1907 阅读 · 0 评论 -
表达式求解
#include#include#include#define EOFILE &typedef char SElemType;#include "stack.h"Status visit(SElemType * e){ printf("%c", *e);}char OP[10]={+,-,*,/,(,),#};int precede[7][7]={原创 2009-03-11 16:21:00 · 459 阅读 · 0 评论 -
行编辑
#include#includetypedef char SElemType;#include "stack.h"#define EOFILE & int visit(SElemType * e){ printf("%c", *e);}void LineEdit(){ pSqstack S,T; char str[1000]; int strlen=0; char原创 2009-03-11 16:24:00 · 341 阅读 · 0 评论 -
串操作
一、串定义串(或字符串),是由零个或多个字符组成的有限序列。一般记为:s=a1a2...an(n>=0)其中s是串的名,用单引号括起来的字符序列是串的值;串中字符的数目n称为串的长度。零个字符的串称为空串,它的长度为零。串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中的称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字原创 2009-03-14 10:31:00 · 538 阅读 · 0 评论 -
数组实现
一、数组的定义几乎所有的程序设计语言都把数组类型设定为固有类型。以抽象数据类型的形式讨论数组的定义和实现,可以让我们加深对数组类型的理解。数组的定义:ADT Array{数据对象:ji=0,...,bi-1,i=1,2,...,n;D={aj1j2...jn|n(>0)称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2...jn (-原创 2009-03-18 22:34:00 · 521 阅读 · 0 评论 -
多项式乘法
<br />/*<br />* 文件名: 1_3.c(选做题)<br />* 实验环境: Turbo C 2.0<br />* 完成时间: 2003年2月22日<br />*--------------------------------------------------------------------<br />* 改进说明: 可以实现多个多项式的加法、减法、乘法,并且比书中算法更加<br />* 合理. 例如: 连加a+b+c+d,连减a-b-c-d,连乘a*b*c*d.<br />*/<br原创 2011-03-17 20:22:00 · 550 阅读 · 0 评论