数据结构
数据结构
ぁのひと
这个作者很懒,什么都没留下…
展开
-
数组:买卖股票的最佳时机 II
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/x2zsx1/由于我们已经能够提前知道每一天股票的价格,那么只要判断出来后一天的价钱比前一天的高,那么我们就执行这次买卖操作,并记录获得的收益。由于我们已经能够提前知道每一天股票的价格,那么只要判断出来后一天的价钱比前一天的高,那么我们就执行这次买卖操作,并记录获得的收益。在每一天,你可以决定是否购买和/或出售股票。你也可以先购买,然后在。来源:LeetCode。转载 2023-04-15 19:28:11 · 73 阅读 · 0 评论 -
3.10求单链表最大整数、结点个数、所有整数平均值的递归算法
题目:已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的递归算法: ① 求链表中的最大整数;② 求链表的结点个数;③ 求所有整数的平均值。算法描述:/* 求链表中的最大整数*/int GetMax(LinkList &L){ int m; if(!L->next){ return L->data; } m=Max(L->next); return m>=L->data?m:L->data;}/* 求链表原创 2020-08-28 21:18:22 · 3963 阅读 · 0 评论 -
3.9Ackermann函数的递归算法和非递归算法
已知Ackermann函数定义如下:① 写出计算Ack(m,n)的递归算法,并根据此算法给出出Ack(2,1)的计算过程。② 写出计算Ack(m,n)的非递归算法。①Ack(m,n)的递归算法和Ack(2,1)的计算过程/* Ack(m,n)的递归算法*/int Ack(int m,n){ if (m==0) return(n+1); else if(m!=0&&n==0) return(Ack(m-1,1)); else return(Ack(m-1,Ack(m,n原创 2020-08-28 20:52:28 · 7342 阅读 · 4 评论 -
3.8循环队列队尾删除及队头插入算法
题目:如果允许在循环队列的两端都可以进行插入和删除操作。要求:① 写出循环队列的类型定义;② 写出“从队尾删除”和“从队头插入”的算法。①定义循环队列:#define MAXSIZE 10;typedef struct{ Elemtype data[MAXSIZE]; int front;//队头指针 int rear;//队尾指针}SqQueue;②从队尾删除:Status DeQueue(SqQueue &S,int &x){ //&S为出队队列;x存原创 2020-08-28 20:13:28 · 5832 阅读 · 0 评论 -
3.7带标志的循环队列的插入删除操作
题目:假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag == 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(EnQueue)和删除(DeQueue)算法。思路:当tag等于0并且头指针和尾指针指向同一位置时,队空;当tag等于1并且头指针和尾指针指向同一位置时,队满。队列的结构:#define MAXSIZE 100;typedef struct Queue{ Elemtype tag原创 2020-08-25 21:17:01 · 1246 阅读 · 0 评论 -
3.6无头指针的循环队列的操作
题目:假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素站点(注意不设头指针) ,试编写相应的置空队、判队空 、入队和出队等算法。定义循环队列队列:typedef struct QNode{ ElemType data; //数据域 struct QNode *next; //指针域}QNode,*QueuePtr;typedef struct{ //不设头指针 QueuePtr rear;//尾指针}LinkQueue;1.置空循环队列思路:置空队就是将除原创 2020-08-24 21:19:54 · 1600 阅读 · 2 评论 -
3.5判断序列是否合法
题目:假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。①下面所示的序列中哪些是合法的?A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO②通过对①的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回TRUE,否则返回ERROR。分析:①. A、D是合法序列;B、C是非法序列。对于B队列,先入栈一次,再连续出栈两原创 2020-08-20 20:31:27 · 2550 阅读 · 1 评论 -
3.3 键入整数序列,通过判断键入的值入栈或出栈
题目:设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。分析:进栈、出栈的操作比较多,而且题目中提到异常“入栈满”,所以选择顺序栈。思路:初始化栈,循环键入整数序列,并判断键入的数值是否为-1。如果不是-1,判断栈是否已满,若满输出“栈满”并退出,否则此数入栈;如果是-1,判断栈是否为空,若空输出“栈空”并退出,否则输出栈顶元素并出栈。算法描述:原创 2020-08-19 17:13:18 · 1494 阅读 · 0 评论 -
3.2用栈判断回文字符向量
题目:回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。算法思想:由题目中的例子可知需要按照字符向量中字符的个数分类讨论。1.当字符向量的长度是偶数时,入栈的字符个数正好是字符向量的一半;栈非空时,依次将栈顶元素出栈,并和字符向量后半段的元素比较,当栈顶元素和当前字符向量不相同,说明不是回文字符向量,返回FALSE;反之,将新的栈顶元素和下一个字符比较,直到栈为空时,说明是回文向量。2.当字符向量的长度是奇数时原创 2020-08-17 20:41:31 · 557 阅读 · 0 评论 -
3.1双栈结构及其基本操作
题目:将编号0和1的两个栈存放于一个空间V[m]的数组空间中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]=-1时该栈为空;当第1号栈的栈顶指针top[1]=m时,该栈为空。两个栈均从两端向中间增长(如下图)。试编写双栈初始化,判断栈空,栈满,进栈,出栈等算法的函数。双栈结构的定义如下:typedef struct{int top[2],bot[2];//栈顶和栈底指针 SElemType *V;//栈数组 in m;//栈最大可容纳元素的个数(也就是数组长度) }DblStack;原创 2020-08-17 19:15:29 · 2563 阅读 · 0 评论