Microsoft PowerPoint - ch3.pptx
|
|
|
- 托轸 常
- 7 years ago
- Views:
Transcription
1 第 3 章栈和队列 第 3 章栈和队列 3.1 栈 3.2 栈的应用举例 3.3 队列 哈尔滨工业大学 ( 威海 ) 计算机科学与技术学院 (2014/2015 学年秋季版 ) 1 本章重点难点 第 3 章栈和队列 重点 : (1) 栈 队列的定义 特点 性质和应用 ;(2)AT 栈 AT 队列的设计和实现以及基本操作及相关算法 难点 : (1) 循环队列中对边界条件的处理 ;(2) 分析栈和队列在表达式求值 括号匹配 数制转换 迷宫求解中的应用实例, 提高利用栈和队列解决实际问题的应用水平 3.1 栈 3.2 栈的应用举例 3.3 队列 2 3
2 3.1 栈 抽象数据类型栈的定义 抽象数据类型栈的定义 栈的定义栈 (Stack) 是一种特殊的线性表, 其插入和删除操作均在表的一端进行, 是一种运算受限的线性表 栈的术语栈顶 (top) 是栈中允许插入和删除的一端 栈底 (bottom) 是栈顶的另一端 抽象数据类型栈的定义 抽象数据类型栈的定义 栈的示意图 出栈 入栈 抽象数据类型 栈 AT Stack { 栈的特点 a n 后进先出 (Last In First Out, 简称 LIFO) 又称栈为后进先出表 ( 简称 LIFO 结构 ) a 2 a 1 栈顶 栈底 数据对象 : ={ a i a i ElemSet, i=1,2,...,n, n 0 数据关系 : R1={ <a i-1, a i > a i-1, a i, i=2,...,n 约定 a n 端为栈顶,a 1 端为栈底 基本操作 : AT Stack 见下页 6 7
3 3.1.1 抽象数据类型栈的定义 栈的基本操作 InitStack(&S) // 初始化栈 estroystack(&s) // 销毁栈 learstack(&s) // 清空栈 StackEmpty(S) // 判栈空 StackLength(S) // 求栈长度 GetTop(S, &e) // 取栈顶元素 Push(&S, e) // 入栈 Pop(&S, &e) // 出栈 StackTravers(S, visit()) // 遍历栈 3.1 栈 抽象数据类型栈的定义 8 9 顺序栈的 语言实现 //----- 栈的顺序存储表示 #define STAK_INIT_SIZE 100; // 栈容量 #define STAKINREMENT 10; // 栈增量 typedef struct { SElemType *base; // 基地址 SElemType *top; // 栈顶指针 int stacksize; // 栈容量 SqStack; SqStack S; 栈初始化过程演示 (1) 给栈 S 申请栈空间 (2) 设置基地址 S.base 和栈顶地址 S.top (3) 设置栈容量 S.stacksize=STAK_INIT_SIZE S.base S.top 10 11
4 栈初始化算法 Status InitStack (SqStack &S){ // 构造一个空栈 S S.base=(ElemType*)malloc(STAK_INIT_SIZE* sizeof(elemtype)); if (!S.base) exit (OVERFLOW); // 存储分配失败 S.top = S.base; S.stacksize = STAK_INIT_SIZE; return OK; 入栈操作演示 (1) 如果栈满, 给栈增加容量 (2) 将数据存入栈顶位置, 栈顶后移一位 S.base a b c d e f e S.top S.top 入栈操作演示 Status Push (SqStack &S, SElemType e) { if (S.top - S.base >= S.stacksize) { S.base = (ElemType *) realloc ( S.base, (S.stacksize + STAKINREMENT) * sizeof (ElemType)); if (!S.base) exit (OVERFLOW); // 存储分配失败 S.top = S.base + S.stacksize; S.stacksize += STAKINREMENT; *S.top++ = e; return OK; 其它栈操作讨论 estroystack(&s) // 销毁栈 learstack(&s) // 清空栈 StackEmpty(S) // 判栈空 StackLength(S) // 求栈长度 GetTop(S, &e) // 取栈顶元素 Pop(&S, &e) // 出栈 StackTravers(S, visit()) // 遍历栈 14 15
5 链栈的实现与链表的实现基本相同, 头结点作为栈顶位置 链栈的 语言类型定义 Typedef struct SNode { ElemType data; struct Snode *next; SNode, *LinkStack; // 数据域 // 链域 讨论链栈基本操作的实现 InitStack(&S) // 初始化栈 estroystack(&s) // 销毁栈 learstack(&s) // 清空栈 StackEmpty(S) // 判栈空 StackLength(S) // 求栈长度 GetTop(S, &e) // 取栈顶元素 Push(&S, e) // 入栈 Pop(&S, &e) // 出栈 StackTravers(S, visit()) // 遍历栈 第 3 章栈和队列 3.2 栈的应用举例 3.1 栈 3.2 栈的应用举例 3.3 队列 数制转换 括号匹配的检验 行编辑程序问题 表达式求值 18 19
6 计算顺出顺序 进制转换原理 : 任何 X 进制数 N 转换成 Y 进制数其结果都是要化成如下形式 N X a Y n 数制转换 n a2 Y a1 Y a0 Y 转换的过程就是通过取余运算求出 a 0,a 1,, a n, 而先求出的是个位, 十位, 与我们写数的习惯先从高位写正好相反, 通过栈先进后出的特点, 很容易实现倒过来的过程 数制转换 将 10 进制 1348 转换成 8 进制. 过程如下 : N N div 8 N mod 8 输 序例 数制转换 10 进制数 N 转换成 8 进制的算法 void conversion () { InitStack(S); scanf ("%d", &N); while (N) { Push(S, N%8); N = N/8; while (!StackEmpty(S)) { Pop(S,e); printf ( "%d", e ); // conversion 3.2 栈的应用举例 数制转换 括号匹配的检验 行编辑程序问题 表达式求值 22 23
7 问题描述 一个表达式中, 包含三种括号 ( 和 ), [ 和 ] 和 { 和, 这三种括号可以按任意的合法次序嵌套使用 ( 如 : [ { [ ] ] [ ] ( ) ) 设计算法检验表达式中所使用括号的合法性 问题讨论 括号匹配的检验 讨论 : 如果第一次遇到的右括号是 ], 那么前面出现的左括号有什么特点 结论 : 如果第一次遇到的右括号是 ], 那么急迫期待前面出现的最后一个左括号是 [ 算法过程 括号匹配的检验 (1) 当遇到左括号时, 进栈, 遇到右括号时出栈 ; (2) 当遇到某一个右括号时, 栈已空, 说明到目前为止, 右括号多于左括号 ; (3) 从栈中弹出的左括号与当前检验的右括号类型不同, 说明出现了括号交叉情况 ; (4) 算术表达式输入完毕, 但栈中还有没有匹配的左括号, 说明左括号多于右括号 期待的急迫程度 括号匹配的检验 括号匹配检验算法 Status check( ) { char ch; InitStack(S); while ((ch=getchar())!= #') { switch (ch) { case (ch=='(' ch=='[' ch=='{'):push(s,ch);break; case (ch== ')'): if (StackEmpty(S)) retrun FALSE; else { Pop(S,e); if(e!= '(') return FALSE; break; 括号匹配的检验 括号匹配检验算法 case (ch== ]'): if (StackEmpty(S)) retrun FALSE; else {Pop(S,e);if(e!= [') return FALSE; break; default:break; if (StackEmpty(S)) return TRUE; else return FALSE; 27
8 3.2 栈的应用举例 数制转换 括号匹配的检验 行编辑程序问题 表达式求值 问题描述 行编辑程序问题 在用户输入一行的过程中, 允许用户输入出差错, 并在发现有误时可以及时更正 解决办法设立一个输入缓冲区, 用以接受用户输入的一行字符, 然后逐行存入用户数据区, 并假设 # 为退行符 行编辑程序问题例假设从终端接受了这样两行字符 : whli##ilr#e(s#*s) outcha@putchar(*s=#++); 则实际有效的是下列两行 : while (*s) putchar(*s++); 解决方案 : 栈作为输入缓冲区 ; 对接受字符判断, 非 # 则压栈 ; 若为 # 则弹栈 ; 则清空栈 行编辑问题算法 void LineEdit(){ // 利用字符栈 S, 从终端接收一行并传送至调用过程的数据区 InitStack(S); ch=getchar(); while (ch!= EOF) { //EOF 为全文结束符 while (ch!= EOF && ch!= \n ) { 行编辑程序问题 estroystack(s); 30 31
9 switch (ch) { case '#' : Pop(S, c); break; case '@': learstack(s); break;// 重置 S 为空栈 default : Push(S, ch); break; ch = getchar(); // 从终端接收下一个字符 3.2 栈的应用举例 数制转换 括号匹配的检验 行编辑程序问题 栈中字符传送至调用过程的数据区 ; learstack(s); // 重置 S 为空栈 if (ch!= EOF) ch = getchar(); 表达式求值 问题描述 如图表示一个迷宫, 有一个入口, 一个出口, 从一个位置可以向 8 个方向走,0 表示能走通,1 表示走不通, 求从入口到出口的路径 入口 出口 用栈实现迷宫路径求解的过程 (1) 入口位置入栈, 作标记以免重复进入 (2) 从栈顶位置任选一个可以进的位置, 并将此位置作标记避免重复, 新进位置入栈 (3) 重复 (2), 若栈顶位置无路可走, 则退栈, 从新的栈顶重复 (2) (4) 直到找到出口, 从栈底到栈顶即是路径, 或者栈空, 表示从入口到出口没通路 34 35
10 四周墙壁解决办法如图 从某一点 [x][y] 出发搜索其四周的邻点 maze[6][8] maze[8][10] 36 [x-1][y-1] [x-1][y] [x-1][y+1] [x][y-1] [x][y] [x][y+1] [x+1][y-1] [x+1][y] [x+1][y+1] struct moved { int x,y; move[0].x=0 move[0].y=1... move[8]; move[1].x=1 move[7].x=-1 move[1].y=1 move[7].y=1 37 如何防止重复到达某位置 到达某点后, 将此点的值改为 -1 迷宫路径求解算法 设定当前位置的初值为入口位置 ; do{ 若当前位置可通, 则 { 将当前位置插入栈顶 ; 若该位置是出口位置, 则算法结束 ; 否则切换当前位置的东邻方块为新的当前位置 ; 否则 {. while ( 栈不空 ); maze[8][10] 38 39
11 迷宫路径求解算法 若栈不空且栈顶位置尚有其他方向未被探索, 则设定新的当前位置为 : 沿顺时针方向旋转找到的栈顶位置的下一相邻块 ; 若栈不空但栈顶位置的四周均不可通, 则 { 删去栈顶位置 ; 若栈不空, 则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空 ; 3.2 栈的应用举例 数制转换 括号匹配的检验 行编辑程序问题 表达式求值 若栈空, 则表明迷宫没有通路 表达式求值 表达式求值 问题描述 一个表达式由操作数 (operand) 运算符 (operator) 界限符 (delimiter) 组成 运算符和界限符统称为 算符, 写出 算符优先法 求值的算法 例 求 3*(2+3*5)+6 的值 算法求解过程设置两个栈, 一个存操作数, 栈名为 OPN, 一个存操作符, 栈名为 OPTR 栈 (1) 首先置操作数栈为空, 表达式起始符 # 为运算符栈的栈底元素 ; (2) 依次读入表达式中每个字符, 若是操作数则进 OPN 栈, 若是运算符则和 OPTR 栈的栈顶运算符比较优先权后作相应操作, 直到整个表达式操作完毕 42 43
12 3.2.5 表达式求值 算法求解过程 (1) 若栈顶运算符小于输入运算符, 输入运算符进栈 OPTR; (2) 若栈顶运算符等于输入运算符 ( 只有栈顶是 (, 输入是 ), 或者栈顶是 #, 输入是 #) 两种情况, 分别去除一对括号, 或结束 (3) 若栈顶运算符大于输入运算符, 弹出栈顶运算符, 从 OPN 中弹出两个操作数与弹出运算符计算后再存入 OPN 栈, 继续 表达式求值 表达式求值算法 OperandType EvaluateExpression(){ initstack(optr);push(optr, # ); initstack(opn);c=getchar(); while(c!= # ) GetTop(OPTR)!= # ){ if(!in(c,op)) { Push((OPN,c);c=getchar(); else switch(precede(gettop(optr),c)){ case < : Push(OPTR,c);c=getchar();break; case = : Pop(OPTR,x);c=getchar;break; case > : Pop(OPTR,theta); Pop(OPN,a); Pop(OPN,b); Push(OPN,Operate(a,theta,b)); break; //switch 语句结束 //while 语句结束 return(gettop(opn)); // 算法结束 第 3 章栈和队列 3.1 栈 3.2 栈的应用举例 3.3 队列 46 47
13 队列的定义 抽象数据类型队列的定义 队列示意图 抽象数据类型队列的定义 队列 (Queue) 是一种运算受限的特殊的线性表, 它只允许在表的一端进行插入, 而在表的另一端进行删除 出队 a 1 a 2 a 3 a n 队头 队尾 入队 队列的术语 队尾 (rear) 是队列中允许插入的一端 队头 (front) 是队列中允许删除的一端 队列的特点 先进先出 (First In First Out, 简称 FIFO) 又称队列为先进先出表 抽象数据类型队列 AT Queue { 数据对象 : ={a i a i ElemSet, i=1,2,...,n, n 0 数据关系 : R1={ <a i-1,a i > a i-1, a i, i=2,...,n 约定其中 a 1 端为队列头, a n 端为队列尾 基本操作 : 抽象数据类型队列的定义 AT Queue 见下页 抽象数据类型队列的定义 队列的基本操作 InitQueue(&Q) // 初始化队列 estroyqueue(&q) // 销毁队列 QueueEmpty(Q) // 判队列是否空 QueueLength(Q) // 求队列长度 GetHead(Q, &e) // 取队头元素 learqueue(&q) // 清空队列 EnQueue(&Q, e) // 入队列 equeue(&q, &e) // 出队列 QueueTravers(Q, visit()) // 遍历队列 50 51
14 3.3.2 链队列 链队列结点实现 typedef struct QNode { // 结点类型 QElemType data; struct QNode *next; QNode, *QueuePtr; 带头结点的链队列示意图 Q.front Q.rear 链队列 ^ 头结点 空队列 链队列数据类型实现 typedef struct { // 链队列类型 QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针 LinkQueue; Q.front Q.rear a 1 a 2 a n ^ 链队列 带头结点的链队列初始化 Status InitQueue (LinkQueue &Q) { // 构造一个空队列 Q Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); if (!Q.front) exit (OVERFLOW); // 存储分配失败 Q.front->next = NULL; return OK; 链队列 带头结点的链队列入队算法 Status EnQueue (LinkQueue &Q, QElemType e) { // 插入元素 e 为 Q 的新的队尾元素 p = (QueuePtr) malloc (sizeof (QNode)); if (!p) exit (OVERFLOW); // 存储分配失败 p->data = e; p->next = NULL; Q.rear->next = p; Q.rear = p; return OK; 54 55
15 3.3.2 链队列 带头结点的链队列出队算法 Status equeue (LinkQueue &Q, QElemType &e) { // 若队列不空, 则删除 Q 的队头元素, // 用 e 返回其值, 并返回 OK; 否则返回 ERROR if (Q.front == Q.rear) return ERROR; p = Q.front->next; e = p->data; Q.front->next = p->next; if (Q.rear == p) Q.rear = Q.front; free (p); return OK; 链队列 带头结点的链队列其它操作讨论 estroyqueue(&q) // 销毁队列 QueueEmpty(Q) // 判队列是否空 QueueLength(Q) // 求队列长度 GetHead(Q, &e) // 取队头元素 learqueue(&q) // 清空队列 QueueTravers(Q, visit()) // 遍历队列 顺序队列讨论 顺序队列讨论 循环队列属于顺序队列的一种, 讨论在采用一般顺序队列时出现的问题 4 3 E E E E B A B 1 0 A B A B A Sq.rear=5 sq.front=0 Sq.rear=5 Sq.front=1 Sq.rear=5 Sq.front=2 Sq.rear=5 Sq.front=5 Sq.rear=0 Sq.front=0 Sq.rear=1 Sq.front=0 Sq.rear=2 Sq.front=0 Sq.rear=5 Sq.front=0 讨论 : 在采用一般顺序队列时出现假上溢现象
16 循环队列的定义 循环队列是顺序队列的一种特例, 它是把顺序队列构造成一个首尾相连的循环表 指针和队列元素之间关系不变 Sq.rear=4 Sq.front=2 E Sq.rear=0 Sq.front=2 E F Sq.rear=1 Sq.front=2 循环队列空状态和满状态的讨论 空状态 Sq.rear=0 Sq.front=0 满状态 E B A Sq.rear=0 Sq.front=0 讨论结论 : 循环队列空状态和满状态都满足 Q.front=Q.rear 循环队列空状态和满状态的判别 方案 1: 另设一个标志区别队列是空还是满 ; 例如 : 设一个变量 count 用来记录队列中元素个数, 当 count==0 时队列为空, 当 count== MAXQSIZE 时队列为满 循环队列空状态和满状态的判别 方案 2: 以 队头指针在队列尾指针的下一位置 ( 指环状的下一位置 ) 上 作为队列呈满状态的标志, 牺牲一个元素存储空间 ; 队满条件为 : (sq.rear+1) mod maxsize==sq.front 队空条件为 : sq.rear==sq.front 62 63
17 循环队列数据类型实现 #define MAXQSIZE 100 // 最大队列长度 typedef struct { QElemType *base; // 动态分配存储空间 int front; // 头指针, 若队列不空, // 指向队列头元素 int rear; // 尾指针, 若队列不空, 指向队列尾元素的下一个位置 SqQueue; SqQueue Sq; 循环队列初始化算法 Status InitQueue (SqQueue &Q) { // 构造一个空队列 Q Q.base = (ElemType *) malloc (MAXQSIZE *sizeof (ElemType)); if (!Q.base) exit (OVERFLOW); // 存储分配失败 Q.front = Q.rear = 0; return OK; 循环队列入队算法 Status EnQueue (SqQueue &Q, ElemType e) { // 插入元素 e 为 Q 的新的队尾元素 if ((Q.rear+1) % MAXQSIZE == Q.front) return ERROR; // 队列满 Q.base[Q.rear] = e; Q.rear = (Q.rear+1) % MAXQSIZE; return OK; 循环队列出队算法 Status equeue (SqQueue &Q, ElemType &e) { // 若队列不空, 则删除 Q 的队头元素, // 用 e 返回其值, 并返回 OK; 否则返回 ERROR if (Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front+1) % MAXQSIZE; return OK; 66 67
18 分析以下两种状态如何求队列长度 求循环队列长度算法 int QueueLength(SqQueue Q) { return (Q.rear-Q.front+MaxSize)%MaxSize; sq->rear=4 sq->front=2 sq->rear=1 sq->front= 本章小结 熟练掌握 : (1) 栈 队列的定义 特点和性质 ; (2) AT 栈 AT 队列的设计和实现以及基本操作及相关算法 重点学习 : AT 栈和队列在表达式求值 括号匹配 数制转换 迷宫求解中的应用, 提高利用栈和队列解决实际问题的应用水平 70
正文.doc
第 3 章 栈 实验三 3.1 实验目的及要求 1. 理解特殊的线性结构 顺序栈的抽象数据类型的定义, 及其在 C 语言环境中的表示方法 2. 理解顺序栈的基本操作的算法, 及其在 C 语言环境中一些主要基本操作的实现 3. 在 C 语言环境下实现顺序栈的应用操作 : 1 利用栈实现十进制数转换成八进制数 2 利用栈实现一位数的加减乘除的表达式求解 3.2 实验内容 经过对实验目的及要求的分析, 本实验仍然采用首先描述栈的基本操作集函数,
PowerPoint Presentation
第 章 栈与队列 本章主题 : 栈和队列的应用 教学目的 : 掌握栈和队列的应用方法, 理解栈的重要作用 教学重点 : 利用栈实现行编辑, 利用栈实现表达式求值 教学难点 : 利用栈实现表达式求值 2011-10-18 1 .1 ADT 栈 ( 定义和运算 ) 1.. 栈的定义 栈 stack 是一种特殊的 ( 有序表 ) 线性表, 插入 或删除栈元素的运算只能在表的一端进行, 称运算 的一端为栈顶,
Microsoft PowerPoint - 4.pptx
第 4 章栈和队列 运算受限的线性表 栈 表达式求值 搜索与回溯 队列 队列的应用 4.1 栈 只在称为栈顶 (top) 的一端插入和删除的线性表 另一端称为栈底 (bottom) 数据通过栈的顺序 后进先出 (LIFO) top bottom a n-1 a n-2 a 0 栈的抽象数据类型 class Stack { public: Stack ( ) { ; ~Stack ( ) { ; int
Microsoft PowerPoint - Lecture3.ppt
Chap 4. Links, Stacks and Queue 1 Lists A list is a finite, ordered sequence of data items. Important concept: List elements have a position. Notation: What operations should we implement?
40 第二部分试题部分 9. 假设栈初始为空, 将中缀表达式 a/b+(c*d-e*f)/g 转换为等价的后缀表达式的过程中, 当扫描 到 f 时, 栈中的元素依次是 ( ) 2014 年全国试题 2(2) 分 A. +(*- B. +(-* C. /+(*-* D. /+-* 10. 循环队列存放
第 3 章栈和队列 39 第 3 章 栈和队列 一 选择题 1. 为解决计算机主机与打印机之间速度不匹配问题, 通常设置一个打印数据缓冲区, 主机将要 输出的数据依次写入该缓冲区, 而打印机则依次从该缓冲区中取出数据 该缓冲区的逻辑结 构应该是 ( ) 2009 年全国试题 1(2) 分 A. 栈 B. 队列 C. 树 D. 图 2. 设栈 S 和队列 Q 的初始状态均为空, 元素 a, b, c,
新・解きながら学ぶC言語
330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180
新・明解C言語入門編『索引』
!... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177
CC213
: (Ken-Yi Lee), E-mail: [email protected] 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,
C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1
C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1 1 CARDGAME 1 CardGame 题目描述 桌上有一叠牌, 从第一张牌 ( 即位于顶面的牌 ) 开始从上往下依次编号为 1~n 当至少还剩两张牌时进行以下操作 : 把第一张牌扔掉, 然后把新的第一张放到整叠牌的最后 请模拟这个过程, 依次输出每次扔掉的牌以及最后剩下的牌的编号 输入 输入正整数 n(n
新版 明解C言語入門編
328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66
数据结构 Data Structure
数据结构 : 线性表 Data Structure 2016 年 3 月 15 日星期二 1 线性表 栈和队列 线性表 字典 ADT 栈 队列 2016 年 3 月 15 日星期二 2 线性表 定义 : 线性表 L 是 n 个数据元素 a 0,a 1, a n-1 的有限序列, 记作 L=(a 0,a 1, a n-1 ) 其中元素个数 n(n 0) 定义为表 L 的长度 当 n=0 时,L 为空表,
C 1
C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=
4
孙猛 http://www.math.pku.edu.cn/teachers/sunm 2017 年 9 月 28 日 2 栈及其抽象数据类型 栈的实现 栈的应 用 3 基本概念 栈是 一种特殊的线性表, 它所有的插 入和删除都限制在表的同 一端进 行行 表中允许进 行行插 入 删除操作的 一端叫做栈的顶 表的另 一端则叫做栈的底 当栈中没有元素时, 称之为空栈 栈的插 入运算通常称为进栈或 入栈,
int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;
Memory & Pointer [email protected] 2.1 2.1.1 1 int *p int a 0x00C7 0x00C7 0x00C7 2.1.2 2 int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++; 2.1.3 1. 2. 3. 3 int A,
C/C++ - 字符输入输出和字符确认
C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,
C/C++ - 文件IO
C/C++ IO Table of contents 1. 2. 3. 4. 1 C ASCII ASCII ASCII 2 10000 00100111 00010000 31H, 30H, 30H, 30H, 30H 1, 0, 0, 0, 0 ASCII 3 4 5 UNIX ANSI C 5 FILE FILE 6 stdio.h typedef struct { int level ;
_汪_文前新ok[3.1].doc
普 通 高 校 本 科 计 算 机 专 业 特 色 教 材 精 选 四 川 大 学 计 算 机 学 院 国 家 示 范 性 软 件 学 院 精 品 课 程 基 金 青 年 基 金 资 助 项 目 C 语 言 程 序 设 计 (C99 版 ) 陈 良 银 游 洪 跃 李 旭 伟 主 编 李 志 蜀 唐 宁 九 李 涛 主 审 清 华 大 学 出 版 社 北 京 i 内 容 简 介 本 教 材 面 向
新版 明解C++入門編
511!... 43, 85!=... 42 "... 118 " "... 337 " "... 8, 290 #... 71 #... 413 #define... 128, 236, 413 #endif... 412 #ifndef... 412 #if... 412 #include... 6, 337 #undef... 413 %... 23, 27 %=... 97 &... 243,
C/C++语言 - 分支结构
C/C++ Table of contents 1. if 2. if else 3. 4. 5. 6. continue break 7. switch 1 if if i // colddays.c: # include int main ( void ) { const int FREEZING = 0; float temperature ; int cold_ days
PowerPoint Presentation
数据结构与算法 ( 三 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 3 章栈与队列 栈 栈与表达式求值 队列 栈和队列的应用 队列的应用 递归到非递归的转换 ( 补充 ) 2 栈 (Stack) 操作受限的线性表 运算只在表的一端进行
生成word文档
希赛网, 专注于软考 PMP 通信考试的专业 IT 知识库和在线教育平台 希赛网在线题库, 提供历年考试真题 模拟试题 章节练习 知识点练习 错题本练习等在线做题服务, 更有能力评估报告, 让你告别盲目做题, 针对性地攻破自己的薄弱点, 更高效的备考 希赛网官网 :http://www.educity.cn/ 希赛网软件水平考试网 :http://www.educity.cn/rk/ 希赛网在线题库
untitled
1 Outline 數 料 數 數 列 亂數 練 數 數 數 來 數 數 來 數 料 利 料 來 數 A-Z a-z _ () 不 數 0-9 數 不 數 SCHOOL School school 數 讀 school_name schoolname 易 不 C# my name 7_eleven B&Q new C# (1) public protected private params override
FY.DOC
高 职 高 专 21 世 纪 规 划 教 材 C++ 程 序 设 计 邓 振 杰 主 编 贾 振 华 孟 庆 敏 副 主 编 人 民 邮 电 出 版 社 内 容 提 要 本 书 系 统 地 介 绍 C++ 语 言 的 基 本 概 念 基 本 语 法 和 编 程 方 法, 深 入 浅 出 地 讲 述 C++ 语 言 面 向 对 象 的 重 要 特 征 : 类 和 对 象 抽 象 封 装 继 承 等 主
第1章
21 世纪高职高专规划教材 计算机系列 数据结构概论 尹绍宏董卿霞苑春苗 编著 清华大学出版社 北京交通大学出版社 北京 内容简介 本书详细地介绍了各种类型的数据结构, 以及查找和排序的方法 对每一种数据结构, 主要讲述其基本概念, 各种存储结构, 以及不同存储结构下的各种操作的实现, 并用 C 语言对其算法进行实现 对查找和排序的各种不同方法除讲述其方法外, 还给出了用 C 语言实现的算法程序,
PowerPoint Presentation
数据结构与算法 ( 一 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第 1 章概论 问题求解 数据结构及抽象数据类型 算法的特性及分类 算法的效率度量 数据结构的选择和评价 2 1.1 问题求解 问题求解 设计方法 编写计算机程序的目的?
( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)
( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.
プログラムの設計と実現II
UNIX C ls mkdir man http://www.tj.chiba-u.jp/lecture/prog2/ Ctrl+x, Ctrl+s ( )..[4]% gcc Wall o hoge hoge.c..[5]%./hoge 1 : 1 2 : 2 3 : 3 4 : 0 6..[6]% (! )..[4]% gcc Wall o hoge hoge.c..[5]%!g gcc Wall
OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料
OOP with Java Yuanbin Wu cs@ecnu OOP with Java 通知 Project 2 提交时间 : 3 月 14 日晚 9 点 另一名助教 : 王桢 Email: [email protected] 学习使用文本编辑器 学习使用 cmd: Power shell 阅读参考资料 OOP with Java Java 类型 引用 不可变类型 对象存储位置 作用域 OOP
新・解きながら学ぶJava
481! 41, 74!= 40, 270 " 4 % 23, 25 %% 121 %c 425 %d 121 %o 121 %x 121 & 199 && 48 ' 81, 425 ( ) 14, 17 ( ) 128 ( ) 183 * 23 */ 3, 390 ++ 79 ++ 80 += 93 + 22 + 23 + 279 + 14 + 124 + 7, 148, 16 -- 79 --
C/C++ 语言 - 循环
C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf
(CIP) /. :, ISBN T P CIP (2005) : : 127 : : : : : 787 mm mm 1
(CIP) /. :,2005. 7 ISBN 7 5612 1935 0.... T P311. 12 4 CIP (2005) 040538 : : 127 :710072 : 029-88493844 88491757 : www.nwpup.com : : 787 mm 1 092 mm 1/ 16 : 6.75 : 165 : 2005 9 1 : 9. 00 : : : ,,,,,,,,
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,
C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1
C++ 程序设计 OJ4 - 参考答案 MASTER 2017 年 5 月 21 日 1 1 SWAP 1 Swap 题目描述 用函数模板的方式实现对不同数据类型的数组中的数据进行输入 从小到大排序和输出 使用如下主函数测试你的模板设计一个函数模板 Swap, 实现任意数据类型的两个数据的交换, 分别用 int 型 double 型和 char 型的数据进行测试 main 函数如下 : int main()
C/C++语言 - 运算符、表达式和语句
C/C++ Table of contents 1. 2. 3. 4. C C++ 5. 6. 7. 1 i // shoe1.c: # include # define ADJUST 7. 64 # define SCALE 0. 325 int main ( void ) { double shoe, foot ; shoe = 9. 0; foot = SCALE * shoe
nooog
C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1
C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1
C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 MYQUEUE 1 MyQueue 题目描述 设计一个 MyQueue 类模板, 类模板说明如下 : template class MyQueue; template std::ostream & operator
Ps22Pdf
C ( CIP) C /. :, 2001. 7 21 ISBN 7-5624 -2355-5. C........ C. TP312 CIP ( 2001 ) 034496 C * * : 7871092 1 /16 : 14. 25 : 356 20017 1 20017 1 : 1 6 000 ISBN 7-5624-2355-5 / TP311 : 21. 00 C, C,,,, C,, (
ebook39-5
5 3 last-in-first-out, LIFO 3-1 L i n e a r L i s t 3-8 C h a i n 3 3. 8. 3 C + + 5.1 [ ] s t a c k t o p b o t t o m 5-1a 5-1a E D 5-1b 5-1b E E 5-1a 5-1b 5-1c E t o p D t o p D C C B B B t o p A b o
Summary
Summary 暑假开始准备转移博客, 试了几个都不怎么满意 ( 我还去试了下 LineBlog 不知道那时候在想 什么 ) 现在暂时转移至 WordPress, 不过还在完善中, 预计 算了不瞎预计的好 课上说最好做个代码集, 嗯嗯我也觉得挺有必要的 毕竟现在我连 Floyd 怎么写都忘了无脑 SPFA_(:з )_ 反正有用没用都稍微写一下, 暂定是目录这些, 有些还在找例题 整理代码什么的,
PowerPoint 演示文稿
数据结构与算法 ( 五 ) 张铭主讲 采用教材 : 张铭, 王腾蛟, 赵海燕编写高等教育出版社,2008. 6 ( 十一五 国家级规划教材 ) http://www.jpk.pku.edu.cn/pkujpk/course/sjjg 第五章 的概念 的抽象数据类型 深度优先搜索 宽度优先搜索 的存储结构 D B A E G C H F I 二叉搜索树 堆与优先队列 Huffman 树及其应用 2 5.2
CC213
: (Ken-Yi Lee), E-mail: [email protected] 177 [P179] (1) - [P181] [P182] (2) - for [P183] (3) - switch [P184] [P187] [P189] [P194] 178 [ ]; : : int var; : int var[3]; var 2293620 var[0] var[1] 2293620
Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3
浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.
Microsoft Word - 第3章.doc
Java C++ Pascal C# C# if if if for while do while foreach while do while C# 3.1.1 ; 3-1 ischeck Test() While ischeck while static bool ischeck = true; public static void Test() while (ischeck) ; ischeck
CHAPTER VC#
1. 2. 3. 4. CHAPTER 2-1 2-2 2-3 2-4 VC# 2-5 2-6 2-7 2-8 Visual C# 2008 2-1 Visual C# 0~100 (-32768~+32767) 2 4 VC# (Overflow) 2-1 2-2 2-1 2-1.1 2-1 1 10 10!(1 10) 2-3 Visual C# 2008 10! 32767 short( )
C/C++语言 - C/C++数据
C/C++ C/C++ Table of contents 1. 2. 3. 4. char 5. 1 C = 5 (F 32). 9 F C 2 1 // fal2cel. c: Convert Fah temperature to Cel temperature 2 # include < stdio.h> 3 int main ( void ) 4 { 5 float fah, cel ;
ebook39-6
6 first-in-first-out, FIFO L i n e a r L i s t 3-1 C h a i n 3-8 5. 5. 3 F I F O L I F O 5. 5. 6 5. 5. 6.1 [ ] q u e n e ( r e a r ) ( f r o n t 6-1a A 6-1b 6-1b D C D 6-1c a) b) c) 6-1 F I F O L I F ADT
C C
C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please
Microsoft PowerPoint - C_Structure.ppt
結構與其他資料型態 Janet Huang 5-1 結構的宣告 struct 結構名稱 struct 結構名稱變數 1, 變數 2,, 變數 m; struct 結構名稱 變數 1, 變數 2,, 變數 m; student; student; 5-2 1 結構變數初值的設定 struct 結構名稱 struct 結構名稱變數 = 初值 1, 初值 2,, 初值 n student="janet","1350901",100,95
月光迴旋曲
臺 北 人, 淡 江 大 學 中 文 所 畢 曾 任 電 腦 雜 誌 採 編 電 視 臺 執 行 製 作 高 職 專 任 導 師, 曾 獲 耕 莘 四 十 週 年 臺 灣 之 顏 文 學 獎 2007 全 國 臺 灣 文 學 營 創 作 獎 第 二 十 四 屆 聯 合 文 學 小 說 新 人 獎 第 九 屆 暨 第 十 二 屆 臺 北 文 學 獎 九 十 九 年 教 育 部 文 藝 創 作 獎 第
《计算概论》课程 第十九讲 C 程序设计语言应用
计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 [email protected] 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout
3. 給 定 一 整 數 陣 列 a[0] a[1] a[99] 且 a[k]=3k+1, 以 value=100 呼 叫 以 下 兩 函 式, 假 設 函 式 f1 及 f2 之 while 迴 圈 主 體 分 別 執 行 n1 與 n2 次 (i.e, 計 算 if 敘 述 執 行 次 數, 不
1. 右 側 程 式 正 確 的 輸 出 應 該 如 下 : * *** ***** ******* ********* 在 不 修 改 右 側 程 式 之 第 4 行 及 第 7 行 程 式 碼 的 前 提 下, 最 少 需 修 改 幾 行 程 式 碼 以 得 到 正 確 輸 出? (A) 1 (B) 2 (C) 3 (D) 4 1 int k = 4; 2 int m = 1; 3 for (int
3.1 num = 3 ch = 'C' 2
Java 1 3.1 num = 3 ch = 'C' 2 final 3.1 final : final final double PI=3.1415926; 3 3.2 4 int 3.2 (long int) (int) (short int) (byte) short sum; // sum 5 3.2 Java int long num=32967359818l; C:\java\app3_2.java:6:
ebook14-4
4 TINY LL(1) First F o l l o w t o p - d o w n 3 3. 3 backtracking parser predictive parser recursive-descent parsing L L ( 1 ) LL(1) parsing L L ( 1 ) L L ( 1 ) 1 L 2 L 1 L L ( k ) k L L ( 1 ) F i r s
, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1
21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414
1
基本練習題 1. 答 : 鄰接矩陣 : D E D E 0 0 1 0 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 1 1 1 1 0 5 5 D E D E 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 鄰接串列 : List[] List[] E List[] E List[] D E List[D] E List[E]
<4D6963726F736F667420576F7264202D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>
全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 考 试 2009 年 上 半 年 软 件 设 计 师 下 午 试 卷 ( 考 试 时 间 14:00~16:30 共 150 分 钟 请 按 下 述 要 求 正 确 填 写 答 题 纸 1. 在 答 题 纸 的 指 定 位 置 填 写 你 所 在 的 省 自 治 区 直 辖 市 计 划 单 列 市 的 名 称 2. 在 答
C
C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;
上海交通大学
一 读程序, 写结果 ( 每题 4 分, 共 40 分 ) 1. 写出下列程序运行结果 class test friend test operator+(const test &p1, const test &p2) return test(p1.data1 + p2.data1, p1.data2 + p2.data2); friend ostream &operator
山东建筑大学学分制管理规定(试行)
山 建 大 校 字 2015 67 号 山 东 建 筑 大 学 关 于 印 发 学 分 制 管 理 规 定 ( 试 行 ) 的 通 知 各 院 部 校 直 各 部 门 : 山 东 建 筑 大 学 学 分 制 管 理 规 定 ( 试 行 ) 已 经 学 校 研 究 同 意, 现 印 发 给 你 们, 请 认 真 遵 照 执 行 山 东 建 筑 大 学 2015 年 8 月 7 日 1 山 东 建 筑
《C语言程序设计》教材习题参考答案
教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,
untitled
1 DBF (READDBF.C)... 1 2 (filetest.c)...2 3 (mousetes.c)...3 4 (painttes.c)...5 5 (dirtest.c)...9 6 (list.c)...9 1 dbf (readdbf.c) /* dbf */ #include int rf,k,reclen,addr,*p1; long brec,erec,i,j,recnum,*p2;
【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课
摄 影 中 的 陌 生 感 和 熟 悉 感 看 不 见 的 故 宫 的 作 者 李 少 白 老 师 以 此 画 册 为 例, 深 刻 分 析 和 探 讨 摄 影 中 的 陌 生 感 和 熟 悉 感 看 不 见 的 故 宫 这 本 画 册 最 初 设 想 分 为 四 个 章 节 第 一 章 叫 辉 煌, 第 二 章 叫 梦 想, 第 三 章 叫 神 秘, 第 四 章 叫 飞 歌 为 什 么 分 四 个
20140511
卷 九 唯 識 學 概 要 真 如 緣 起 也 有 它 不 足 的 地 方! 諸 位 法 師 慈 悲, 陳 會 長 慈 悲, 諸 位 菩 薩, 阿 彌 陀 佛! 請 大 家 打 開 講 義 第 二 十 四 面, 我 們 講 到 二 種 子 之 由 來 我 們 這 一 科 是 講 到 依 唯 識 相 安 立 緣 起, 也 就 是 說 從 唯 識 學 的 角 度 來 探 討 我 們 有 情 眾 生 生
6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit
6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C51 6.1 C51 6.1.1 C51 C51 ANSI C MCS-51 C51 ANSI C C51 6.1 6.1 C51 bit Byte bit sbit 1 0 1 unsigned char 8 1 0 255 Signed char 8 11 128
概述
OPC Version 1.6 build 0910 KOSRDK Knight OPC Server Rapid Development Toolkits Knight Workgroup, eehoo Technology 2002-9 OPC 1...4 2 API...5 2.1...5 2.2...5 2.2.1 KOS_Init...5 2.2.2 KOS_InitB...5 2.2.3
试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默
试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,
38 47995529 威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 1059003070 號 39 47995534 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民
1 08414159 惠 鴻 眼 鏡 行 桃 園 市 中 壢 區 福 德 里 中 華 路 一 段 186 號 1 樓 30,000 獨 資 宋 耀 鴻 105/04/27 府 經 登 字 第 1059003866 號 2 17891110 承 元 冷 氣 空 調 工 程 行 桃 園 市 桃 園 區 中 德 里 國 際 路 1 段 98 巷 50 號 2 樓 之 4 200,000 獨 資 詹 安 平
