数据结构
数据结构是408必考科目,写代码是为了便于自己复习,欢迎指正。
ZJJ啥都学不会
写博客是为加深自己的学习,立志成为想按时睡觉的码农。一起加油吧!欢迎交流qq:1693289889
展开
-
3.2.5--表达式求值
一、题目及分析表达式求值是程序设计语言编译的一个最基本问题,其中任何一个表达式都是由操作数、运算符(±*/)、界限符(#,(,),[,] )组成。运算符和界限符统称算符。算符的优先级关系为(数学角度上):代码:#include <iostream>//ZJJ数据据结构-栈3.2.5#define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREMENT 10//分配增量typedef struct { char* base; c原创 2021-09-22 19:40:30 · 185 阅读 · 0 评论 -
3.2.4--迷宫求解
一、题目及分析求迷宫中从入口到出口的所有路径是一个经典的程序设计问题。由于计算机解决迷宫问题时,通常用的是“穷举求解”的方法,即从口出发,顺某方向向前探索,若能走通,则继续往前走;否则沿原入口路退回,换一个方向再继续探索,直至所有可能的通路都探索到为止。为了保证在任何位置上都能沿原路退回,显然需要用一个后进先出的结构来保存从入口到当前位置的路径。因此,在求迷宫通路的算法中应用“栈”。也就是自然而然的事了。二、思路代码:结构体构造:typedef struct//坐标{ int x; in原创 2021-09-04 17:57:20 · 520 阅读 · 2 评论 -
3.2.3--行编辑程序
行编辑程序一个简单的行编辑程序的功能是:接受用户从终端输入的程序或数据,并存入用户的数据区。由于用户在终端上输入时,不能保证不出差错,因此,若在编辑行中,“每接受一个字符,即存入用户数据区”的做法显然是不恰当的。较好的做法是,设立一个输入缓冲区,用于接受用户输入的一行字符,然后逐行存入用户数据区。允许用户输入出差错,并在发现有误时,及时更正。例如,当用户发现刚刚键入的一个字符是错误的时候,可以补进一个退格符“#”,以表示前一个字符无效;如果发现当前键入的行内差错较多的话,则可以键入一个退格符“@”,以表示原创 2021-09-01 13:27:17 · 1018 阅读 · 0 评论 -
3.2.2--括号匹配的检验
3.2.2–栈的应用(括号匹配的检验)《数据结构》严蔚敏版习题3.2.2,括号匹配问题。是顺序栈的课后习题。原问题:假设表达式中允许包括两种括号:圆括号和方括号,其嵌套方式随意,即(【】())等都是正确的格式,【(】)是不正确的格式。设计一个算法检查输入的字符串中的括号是否是匹配的。思路:建立数组遍历,遇到<{([则入栈>}])则进行匹配出栈操作,如不匹配则也压入栈。第一个元素为>}])直接为不匹配,最后栈为空说明括号匹配。代码:#include<iostream>/原创 2021-08-24 19:47:23 · 228 阅读 · 0 评论 -
3.2.1--栈的应用(数制转换)
3.2.1–栈的应用(数制转换)数制转换在计算机中经常面对不同数制的转换问题,如将一个十进制数N转换为d进制B。数制转换的解决方法很多,其中一个简单的转换算法是重复下述两步。直到N等于零为止。x = N mod dN = N div d其中,N为需要转换的十进制数,d为转换后的进制,x值为转换后各个数位上的数,div为整除运算,mod为求余运算。算法的运行过程为:第一次求出的x值为d进制数的最低位,最后一次求出的x值为d进制数的最高位,所以上述算法是从低位到高位顺序产生d进制的各位,然后逆序输出,原创 2021-08-15 23:43:48 · 495 阅读 · 0 评论 -
3.1-栈的链式储存表示
链式存储结构栈的链式存储结构,简称链栈。 由于栈只是栈顶在做插入和删除操作,所以栈顶应该放在单链表的头部。另外,都有了栈顶在头部了,单链表中的头结点也就失去了意义,通常对于链栈来说,是不需要头结点的。 对于链栈来说,基本不存在栈满的情况,除非内存已经没有使用空间了。 对于空栈来说,链表原来的定义是头指针指向空,那么链栈的空其实就是top=NULL。结构体typedef struct StackNode{ int data;//结点数据域 struct StackNode* next;原创 2021-08-15 18:49:16 · 115 阅读 · 0 评论 -
3.1-栈的顺序表示及栈的顺序储存表示
3.1-栈的顺序表示及栈的顺序储存表示1.栈的定义:在表尾进行插入和删除操作的线性表(仍然满足线性表的操作,只是在push和pop有些区别)栈顶(top)允许插入和删除,另一端称栈底(bottom),不含任何数据元素的栈叫空栈。栈:后进先出(last in first out)的线性表,简称LIFO结构。栈的插入称为进栈,也称压栈,入栈。栈的删除称为出栈,也称弹栈。2.栈的抽象数据结构因为栈本身就是一个线性表,所以线性表的操作特性它都具备,针对它的特殊性,在它的操作上可能会有一些变化。将进栈原创 2021-08-12 16:21:34 · 496 阅读 · 0 评论 -
2.22--【线性表】应用—一元多项式的表示及相加
【线性表】应用—一元多项式的表示及相加typedef struct polynode{ int coef; int exp; polynode* next;}polynode,*polylist;例:建立一元多项式链式存储算法【算法思想】通过键盘输入一组多项式的系数和指数,用尾插法建立一元多项式的链表。以输入系数0为结束标注,并约定建立多项式链表时,总是按指数从小到大排序。【算法描述】polylist CreatList(){ polynode* head = (polynod原创 2021-08-10 23:37:07 · 836 阅读 · 0 评论 -
2.18--2.19双向链表的基本操作
2.18–2.19双向链表的基本操作1.双向链表的定义首先,双链表的结构声明如下:一个前驱节点的指针,一个后继节点的指针和数据域typedef struct DouNode { ElemType data; struct DouNode* pre; struct DouNode* next;}DouNode;双向链表特点 1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些 2.相对于单向链表, 必然占用内存空间更大一些. 3.既可以从头原创 2021-08-10 17:14:43 · 85 阅读 · 0 评论 -
2.13---2.17-静态链表操作详解
2.14—2.15静态链表操作详解链表的一些基本操作,包括对表中数据元素的添加、删除、查找和更改。本节是建立在已能成功创建静态链表的基础上,因此我们继续使用上节中已建立好的静态链表学习本节内容,建立好的静态链表如图 1 所示:静态链表添加元素例如,在图 1 的基础,将元素 4 添加到静态链表中的第 3 个位置上,实现过程如下:1.从备用链表中摘除一个节点,用于存储元素 4;找到表中第 2 个节点(添加位置的前一个节点,这里是数据元素 2),将元2.素 2 的游标赋值给新元素 4;3.将元素原创 2021-08-09 17:15:15 · 225 阅读 · 0 评论 -
2.12-静态链表基本操作详解
静态链表基本操作详解静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。例如,使用静态链表存储 {1,2,3} 的过程如下:创建一个足够大的数组,假设大小为 6,如图 1 所示:接着,在将数据存放到数组中时,给各个数据元素配备一个整形变量,此变量用于指明各个元素的直接后继元素所原创 2021-08-06 16:08:47 · 724 阅读 · 0 评论 -
2.11-俩个有序链表并为一个有序链表
俩个有序链表并为一个有序链表LinkList Union(LinkList &A,LinkList& B, LinkList& C)//链表的合并函数 { LinkList a, b,c; a = A->next; b = B->next; c=C; while (a && b) { if (a->data >= b->data) { c->next = b; c = b; b = b->原创 2021-08-05 16:00:38 · 107 阅读 · 0 评论 -
2.10-头插法尾插法建立链表
头插法建立单链表头插法会使输入的数据插入到链表的表头,输出数据时的数据与读入的数据时相反的,如,以1 2 3 4 5 6 7 8 9建立链表,输出的结果是9 8 7 6 5 4 3 2 1 。第一个元素会始终在链表的尾部1.建立一个空表,此时头指针L指向头结点,L->Next=NULL,如图2.while的第一次循环,插入第一个结点,进行如下操作代码如下:#include<iostream>//ZJJ数据据结构-单链表2.10using namespace std;typ原创 2021-08-05 13:53:46 · 152 阅读 · 0 评论 -
2.8-2.9单链表的基本操作详解
单链表的基本操作详解单链表的创建、插入、删除、修改、查找等基本操作单链表的结点上存储数据data和下个结点的地址——后继指针next,所以可以定义一个结构体存储这两个元素://结点结构体typedef struct Node { int data; struct Node* next;}Node;创建结点:Node* CreateNode(int data)//创建结点{ Node* node = (Node*)malloc(sizeof(Node));//申请内存 node-&g原创 2021-07-29 17:25:34 · 127 阅读 · 0 评论 -
2.6-顺序表的合并(元素赋值法)
顺序表的合并(元素赋值法)对于”顺序表的合并“,则从算法2.2可直接写出形式上极为相似的算法2.7.显然,算法2.7的操作为”元素赋值法“。算法的时间复杂度为(A.len+B.len)。实现后加上了备注,代码条理还算清晰就拿出来分享一下。代码:#include/ZJJ数据据结构-线性表2.6using namespace std;typedef int ElemType;#define List_Init_Size 5//线性表初始长度#define LISTINCREMENT 5//线性表原创 2021-07-28 16:14:34 · 169 阅读 · 0 评论 -
2.5-顺序线性表的查找操作
顺序线性表的查找操作线性表的查找操作:线性表l查找第一个与元素e满足compare()元素的位置。若在,返回其在l中的次序。若不存在则输出不存在 。 int locateelem_sq(sqlist *l,elemtype e,status (*compare)(elemtype, elemtype))第一步设i=1,从线性表第一个位置开始查找。第二步进入循环,判断当前位置的值是否与e相等,并且是否循环到列表最后一个元素。如果未循环到尾部并且值还不相等,则继续循环,寻找符合条件元素的位置。第三原创 2021-07-27 17:53:48 · 411 阅读 · 0 评论 -
2.3-2.4(包含2.2)-线性表的插入与删除
顺序表的插入与删除题目要求:设计程序建立一个顺序表,要求从键盘输入整数,并完成添加插入和删除元素功能,并将该顺序表的元素从屏幕显示出来。使用malloc和realloc函数动态分配内存地址。参考着《数据结构(C语言版)》(清华大学出版社)进行实现实现后加上了备注,代码条理还算清晰就拿出来分享一下。代码:#include<iostream>//ZJJ数据据结构-线性表2.2-2.3using namespace std;typedef int ElemType;#define原创 2021-07-27 15:49:28 · 147 阅读 · 0 评论 -
头插法建立单链表
头插法建立单链表头插法会使输入的数据插入到链表的表头,输出数据时的数据与读入的数据时相反的,如,以1 2 3 4 5 6 7 8 9建立链表,输出的结果是9 8 7 6 5 4 3 2 1 。第一个元素会始终在链表的尾部1.建立一个空表,此时头指针L指向头结点,L->Next=NULL,如图2.while的第一次循环,插入第一个结点,进行如下操作代码如下:#include<iostream>using namespace std;#define ElemType int原创 2021-04-20 10:42:25 · 9027 阅读 · 6 评论 -
线性表的应用举例(已知线性表,然后设计一个算法将所有偶数移动到所有奇数前面;最后在主函数中调用实现移动的算法的函数)
题目:已知线性表(a1,a2,a3,a4…an)按顺序储存,且每个元素都是互不相等的整数。设计算法,把所有偶数移动到所有奇数前面(要求时间最少,辅助空间最少),并且给出完整的程序。解体思路:先定义顺序表的类型,并根据题意将ElemType设为int型,然后设计一个算法move将所有偶数移动到奇数前面,最后在主函数里调用。#include<iostream>using namespace std;#define MAXSIZE 100typedef int ElemType;typed原创 2021-04-18 12:24:34 · 1744 阅读 · 1 评论 -
2.1-线性表的应用举例(设计一个算法将表A和表B的全部元素归并为一个按元素值递增有序的顺序表C)
题目:已知有俩个按元素值递增有序的顺序表La和Lc,设计一个算法将La和表Lb的全部元素归并为一个按元素值递增有序的顺序表Lc算法思路:先设C为空表,然后比较A和B中的数据元素,将A或B中较小的元素插入到C中。当其中一个顺序表的数据元素均已插入到C中时,另一顺序表中的剩余元素依次插入即可。#include<iostream>using namespace std;typedef int ElemType;#define MAXSIZE 100typedef struct { El原创 2021-04-18 11:03:30 · 1486 阅读 · 0 评论