数据结构
文章平均质量分 75
牧童遥指杏花村丫
这个作者很懒,什么都没留下…
展开
-
定长的顺序表及基本操作
自带解引用的符号:->、[]#pragma once //防止头文件被重复引用//固定长度的顺序表#define SIZE 10 //顺序表的长度typedef struct SeqList{ int elem[SIZE];//存放数据的数组 int length;//有效数据的个数}SeqList,*PSeqList;1、初始化顺序表v原创 2017-10-01 20:57:22 · 484 阅读 · 0 评论 -
将x插入到顺序表中保持顺序表的递增有序
例题:设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。#include #include #include #include "dseqlist.h"//不定长顺序表,自动增长#define INITSIZE 10typedef struct DSeqList{ int *elem;//指向存放数据的动态数组 int le原创 2017-10-26 11:12:37 · 8387 阅读 · 0 评论 -
两个顺序表比较大小
例题:设A和均为顺序表,A'和B'分别为和中除去最大共同前缀后的子表。若A'=B'=空表,则A=B;若A'=空表,而B'!=空表,或者两者均不为空表,且A'的首元小于B'的首元,则A否则A>B。试写一个比较A,B大小的算法。#include #include #include //不定长顺序表,自动增长#define INITSIZE 10typedef stru原创 2017-10-26 11:14:28 · 4347 阅读 · 0 评论 -
单链表的合并
例题:假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。#include #include #include typedef struct Node{ int data;//保存数据 struct Node原创 2017-10-26 11:33:23 · 889 阅读 · 0 评论 -
在顺序表A中删除B、C中重复的元素
例题:已知A,B和C为三个递增有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法,并分析你的算法的时间复杂度(注意:题中没有特别指明同一表中的元素值各不相同)#include #include #include //不定长顺序表,自动增长#define INITSIZE 10typedef struct DS原创 2017-10-26 11:51:49 · 4782 阅读 · 0 评论 -
链式队列
链式队列:利用带尾指针的单链表实现1、头文件(lqueue.h)#pragma once//防止头文件重复引用typedef struct QNode{ int data; struct QNode *next;}QNode;typedef struct HNode{ QNode *front;//队头指针 QNode *rear;//队尾指针}HNode,原创 2017-11-13 16:47:23 · 292 阅读 · 0 评论 -
BF朴素查找算法(查找子串)
串的查找很重要 所有要掌握BF算法代码实现:#include #include #include //朴素查找算法BF//函数返回值为在主串中找到之后第一个字符的下标//pos:从主串开始查找的下标int BF(const char *str,const char *sub,int pos)//时间复杂度O(m*n) m:主串的长度 n:子串的长度{ assert原创 2017-11-19 19:52:08 · 1264 阅读 · 0 评论 -
静态链表
静态链表:利用顺序表模拟带头结点的单向循环链表1、头文件(slist.h)#pragma once //静态链表:利用顺序表模拟带头结点的单循环链表//0下标作为有效链表头 有效链为循环链//1下标作为空闲链表头 空闲链为循环链typedef struct SNode{ int data; int next;//后继指针 下一节点的下标}SNode,*PList原创 2017-11-05 20:17:54 · 336 阅读 · 0 评论 -
KMP算法(字符串匹配)
KMP算法基本思想:求next数组:代码实现:#include #include #include #include static void GetNext(const char *str,int *next){ int len = strlen(str); next[0] = -1; next[1] = 0;原创 2017-11-28 12:40:03 · 265 阅读 · 0 评论 -
顺序队列(设计成环形队列)
队列:先进先出环形队列的时间复杂度:(1)入队:O(1)(2)出队:O(1)1、头文件(queue.h)#pragma once//顺序队列:设计成环形队列#define SIZE 10typedef struct Queue{ int elem[SIZE];//数据 int front;//队头指针:队列中第一个数据的下标 int r原创 2017-11-12 17:44:12 · 669 阅读 · 0 评论 -
顺序表的逆置
例题:试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,……an)逆置为(an,……a1)。#include #include#include#define INITSIZE 10typedef struct DSeqList{ int *elem;//指向存放数据的动态数组 int length;//有效数据个数 int listsize;//总容量原创 2017-10-25 15:23:20 · 1033 阅读 · 0 评论 -
单向循环链表的基本操作
单向循环链表的基本操作1、头文件(clist.h)#pragma once//循环链表typedef struct CNode{ int data; struct CNode *next;}CNode,*CList;//循环链表初始化void InitList(CList plist);//头插bool Insert_head(CList plist,原创 2017-10-23 10:27:52 · 496 阅读 · 0 评论 -
单链表的基本操作
单链表的基本操作1、头文件(list.h)#pragma once//带头节点的单链表,尾节点的next为NULL//头节点起哨兵位作用,它不使用(数据域不能存储数据)typedef struct Node{ int data;//保存数据 struct Node *next;//保存下一节点的地址}Node,*List;//List == Node*//t原创 2017-10-19 19:07:52 · 303 阅读 · 0 评论 -
不定长顺序表的基本操作
不定长顺序表1、头文件(dseqlist.h)#pragma once//防止头文件重复引用//不定长顺序表,自动增长#define INITSIZE 10typedef struct DSeqList{ int *elem;//指向存放数据的动态数组 int length;//有效数据个数 int listsize;//总容量,总格子数}DSeqL原创 2017-10-03 11:01:44 · 487 阅读 · 0 评论 -
不定长顺序栈
不定长顺序栈1、头文件(seqstack.h)#pragma once//防止头文件重复引用//不定长顺序表实现栈#define INITSIZE 10typedef struct Stack{ int *elem;//数据 int top;//栈顶指针 表示当前可以存放数据的下标 int stacksize;//栈的总格子数(容量)}Stack,*PStack原创 2017-11-09 13:45:42 · 316 阅读 · 0 评论 -
链式栈
链栈链栈:利用带头结点的单链表实现栈只能在栈顶进行操作 链式栈的栈顶是第一个数据结点特点:先进后出1、头文件(liststack.h)#pragma once//链栈:利用带头结点的单链表实现链栈typedef struct SNode{ int data;//数据 struct SNode *next;//存放下一个结点的地址}SNode,原创 2017-11-09 20:06:08 · 239 阅读 · 0 评论 -
中缀表达式转为后缀表达式(利用顺序栈实现)
主要是利用顺序栈实现这个算法1、先写一个头文件用来定义运算符的优先级#pragma once/********************************************************************************************************* 运算符优先级,数值越小优先级越高******************原创 2017-11-09 20:52:48 · 1405 阅读 · 0 评论 -
双向链表(非循环)
1、头文件(dilst.h)#pragma once//带头结点的双向链表(非循环)typedef struct DNode{ int data;//数据域 struct DNode *next;//后继指针 struct DNode *prio;//前驱指针}DNode,*DList;//初始化双向链表void InitDList(DList plist);//头插原创 2017-10-30 09:18:05 · 2344 阅读 · 0 评论 -
不带头结点的单链表的基本操作
1、头文件(nlist.h)#pragma once//不带头结点的单链表typedef struct NNode{ int data; struct NNode *next;}NNode,*NList;//链表初始化void InitList(NList *pplist);//头插bool Insert_head(NList *pplist,int val);/原创 2017-11-02 12:45:46 · 1419 阅读 · 0 评论 -
两个队列实现一个栈
代码实现:#include <iostream>#include <queue>using namespace std;class MyStack{public: void push(int val) { //插入到非空队列 if (q1.empty()) { q2.push(val); } if (q2.empty()) ...原创 2018-09-06 15:54:48 · 198 阅读 · 0 评论