数据结构
zhou554291911
这个作者很懒,什么都没留下…
展开
-
用单链表的基本操作实现链队列
用单链表的基本操作实现链队列的9个基本操作typedef ElemType QElemType;#define LNode QNode#define LinkList QueuePtrvoid InitQueue(LinkQueue &Q){ InitList(Q.front);//以Q.front为头指针,构造空链表 Q.rear = Q.front;//Q.rear和Q.f原创 2015-07-25 15:02:45 · 558 阅读 · 0 评论 -
抽象数据类型的表示与实现
#include<string.h>//字符串函数头文件#include<ctype.h>//字符函数头文件#include<malloc.h>//malloc等#include<stdio.h>//标准输入输出头文件,包括EOF(=^Z或F6),NULL等#include<stdlib.h>//atoi(),exit()#include<io.h>//eof()#include<mat原创 2015-07-17 16:06:29 · 639 阅读 · 0 评论 -
线性表带头结点的单链表的链式表示和实现
线性表的单链表存储结构struct LNode{ ElemType data; LNode *next;};typedef LNode *LinkList;带有头结点的单链表的12个基本操作void InitList(LinkList &L){ L = (LinkList)malloc(sizeof(LNode)); if (!L)exit(OVERFLOW);原创 2015-07-19 16:55:57 · 572 阅读 · 0 评论 -
数据结构公共代码
#include<string.h>//字符串函数头文件#include<ctype.h>//字符函数头文件#include<malloc.h>//malloc等#include<stdio.h>//标准输入输出头文件,包括EOF(=^Z或F6),NULL等#include<stdlib.h>//atoi(),exit()#include<io.h>//eof()#include<mat原创 2015-07-19 16:58:08 · 503 阅读 · 0 评论 -
数值转换
对于输入的任意一个非负十进制数,打印输出与其等值的N进制数#define N 8void conversion(){ SqStack s; unsigned n;//非负整数 SElemType e; InitStack(s); printf("将十进制整数转化为%d进制数,请输入:n(>=0) = ", N); scanf("%u", &n);原创 2015-07-23 19:10:32 · 525 阅读 · 0 评论 -
栈的顺序表示和实现
栈的顺序存储结构#define STACK_INIT_SIZE 10#define STACK_INCREMENT 2struct SqStack//顺序栈{ SElemType *base;//在栈构造指针之前和销毁之后,base值为NULL SElemType *top;//栈顶指针 int stacksize;//当前已分配的存储空间,以元素为单位};栈的9个基本原创 2015-07-23 17:01:07 · 404 阅读 · 0 评论 -
行编辑程序
一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端进行输入时,不能保证不出差错,因此,若在编辑程序中,“每接受一个字符即存入用户数据区”的做法显然不是最恰当的。较好的做法是,设立一个输入缓冲区,用以接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时可以及时更正。例如,当用户发现刚刚键入的行内差错较多或难以补救,可以键入一个原创 2015-07-23 20:20:42 · 1247 阅读 · 0 评论 -
KMP算法解释
1. 首先,字符串”BBC ABCDAB ABCDABCDABDE”的第一个字符与搜索词”ABCDABD”的第一个字符,进行比较。因为B与A不匹配,所以搜索词后移一位。 2. 因为B与A不匹配,搜索词再往后移。 3. 就这样,直到字符串有一个字符,与搜索词的第一个字符相同为止。 4. 接着比较字符串和搜索词的下一个字符,还是相同。 5.原创 2015-08-05 08:55:31 · 259 阅读 · 0 评论 -
循环队列的顺序表示和实现
队列的顺序存储结构(循环队列)#define MAX_QSIZE 5//最大队列长度+1struct SqQueue{ QElemType *base; int front;//头指针,若队列不空,指向队列头元素 int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置};循环队列的9个基本操作void InitQueue(SqQueue &Q){原创 2015-07-25 15:31:51 · 454 阅读 · 0 评论 -
数组的顺序表示和实现
define MAX_ARRAY_DIM 8//假设数组维数的最大值为8typedef int ElemType;struct Array { ElemType * base;//数组元素基址,由InitArray分配 int dim;//数组维数 int * bounds;//数组维界基址,由InitArray分配 int * constants;//数组原创 2015-08-05 09:19:36 · 399 阅读 · 0 评论 -
二叉树的二叉链表表示和实现
二叉树的二叉链表存储结构typedef struct BiTNode{ TElemType data; BiTNode * lchild, *rchild;//左右孩子指针}BiTNode, * BiTree;二叉链表的22个基本操作#define ClearBiTree DestroyBiTree//清空二叉树和销毁二叉树的操作一样void InitBiTree(BiTree原创 2015-08-19 22:56:37 · 1544 阅读 · 0 评论 -
线性表的顺序表示和实现
线性表的动态分配顺序存储结构#define LIST_INIT_SIZE 10//线性表存储空间的初始分配量#define LIST_INCREMENT 2//线性表存储空间的分配增量struct SqList{ ElemType * elem;//存储空间基址 int length;//当前长度 int listsize;//当前分配的存储容量(以sizeof(Ele原创 2015-07-19 16:08:23 · 241 阅读 · 0 评论 -
设立尾指针的单循环链表的表示和实现
设有尾指针的单循环链表的12个基本操作void InitList(LinkList &L){ L = (LinkList)malloc(sizeof(LNode));//产生头结点,并使L指向此头结点 if (!L)exit(OVERFLOW); L->next = L;//头结点的指针域指向头结点}void ClearList(LinkList &L){ Link原创 2015-07-20 19:13:36 · 1445 阅读 · 1 评论 -
引用类型变量和非引用类型变量的区别
#include<stdio.h>void fa(int a){ a++; printf("在函数a中,a = %d\n", a);}void fb(int &a){ a++; printf("在函数a中,a = %d\n", a);}void main(){ int n = 1; printf("在主程中,调用函数fa之前:n = %d\n",原创 2015-07-17 19:42:37 · 1155 阅读 · 0 评论 -
递归汉诺塔
#include<stdio.h>int c = 0;//全局变量,搬动次数void move(char x, int n, char z){//第n个圆盘从塔座x搬到塔座z printf("第%d步:将%i号从%c移到%c\n", ++c, n, x, z);}void hanoi(int n, char x, char y, char z){//将塔座x上按直径由小到大且自上而下编号为原创 2015-07-25 13:49:42 · 384 阅读 · 0 评论 -
单队列的链式表示和实现
队列是操作受限的线性表,只允许在队尾插入元素,在队头删除元素,为了便于插入元素,设立队尾指针。这样,插入元素的操作与队列长度无关 队列的链式存储结构typedef struct QNode{ QElemType data; QNode *next;}*QueuePtr;struct LinkQueue{ QueuePtr front, rear;//队头,队尾指针原创 2015-07-25 14:30:34 · 505 阅读 · 0 评论 -
堆分配存储的串的表示和实现
串的堆分配存储结构struct HString{ char * ch;//若是非空串,则按串长分配存储区;否则ch为NULL int length;//串长度};堆分配存储的串的12个基本操作#define DestroyString ClearString//DestroyString()和ClearString()作用相同void InitString(HString &S)原创 2015-07-27 20:19:55 · 984 阅读 · 0 评论 -
KMP
void get_next(SString T, int next[]){//求模式串T的next函数值并存入数组next int i = 1, j = 0; next[1] = 0;//T的第1个字符与主串“失配”时,主串的下一字符与T的第1个字符比较 while (i < T[0])//当T[0] > 1时,next[2] = 1 if (j == 0 |原创 2015-07-27 20:36:37 · 340 阅读 · 0 评论 -
定长顺序存储的串的表示和实现
串的定长顺序存储结构#define MAX_STR_LEN 40//用户可在255(一个字节所能表示的最大整数)以内定义最大串长typedef unsigned char SString[MAX_STR_LEN + 1];//0号单元存放串的长度串采用定长顺序存储结构的12个基本操作#define DestroyString ClearString//DestroyString()和ClearSt原创 2015-07-27 15:36:36 · 738 阅读 · 0 评论 -
稀疏矩阵的三元组行逻辑链接的顺序表存储结构表示及实现
#define MAX_SIZE 100#define MAX_RC 20struct Triple{ int i, j;//行下标,列下标 ElemType e;//非零元素值};struct RLSMatrix{ Triple data[MAX_SIZE + 1];//非零元三元组表,data[0]未用 int rpos[MAX_RC + 1];//各行第原创 2015-08-07 16:23:07 · 2910 阅读 · 1 评论 -
二叉树的顺序表示和实现
二叉树的顺序存储结构#define MAX_TREE_SIZE 100//二叉树的最大结点数typedef char TElemType;typedef TElemType SqBiTree[MAX_TREE_SIZE];//0号单元存储根结点struct position//新增{ int level, order;//结点所在的层,在该层的序号(按满二叉树计算)};// func原创 2015-08-07 16:28:38 · 1161 阅读 · 0 评论 -
稀疏矩阵的三元组顺序表存储结构表示及实现
#define MAX_SIZE 100struct Triple{ int i, j;//行下标,列下标 ElemType e;//非零元素值};struct TSMatrix{ Triple data[MAX_SIZE + 1];//非零元三元组表,data[0]未用 int mu, nu, tu;//矩阵的行数,列数,非零元个数};int comp(i原创 2015-08-07 16:21:18 · 5300 阅读 · 0 评论 -
线性表带头结点的单链表的链式表示和实现
带有头结点的单链表的12个基本操作#define DestroyList ClearList//DestroyList()和ClearList()的操作是一样的void InitList(LinkList &L){ L = NULL;}void ClearList(LinkList &L){ LinkList p; while (L){ p = L;原创 2015-07-19 19:57:27 · 548 阅读 · 0 评论 -
带头结点的双向循环链表的表示和实现
线性表的双向链表存储结构typedef struct DuLNode{ ElemType data; DuLNode *prior, *next;}DuLNode, *DuLinkList;带有头结点的双向循环链表的14个基本操作void InitList(DuLinkList &L){ L = (DuLinkList)malloc(sizeof(DuLNode));原创 2015-07-20 20:49:49 · 907 阅读 · 0 评论 -
线索二叉树的表示和实现
线索二叉树的数据结构enum PointerTag//枚举{ Link,Thread//Link(0):指针;thread(1):线索};struct BiThrNode{ TElemType data;//结点的值 BiThrNode * lchild, *rchild;//左右孩子结点 PointerTag LTag : 2;//左标志,占2bit原创 2015-08-19 23:37:26 · 499 阅读 · 0 评论