陈海明 副教授 信息学院 计算机系 http://EEE.chenhaiming.cn 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系 http://EEE.chenhaiming.cn.

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

投資 & 購屋置產 報告 ( 課程 : 個人理財規劃 ) 授課老師 : 許秀鶴 授課老師 : 許秀鶴 報告學生 : 報告學生 : 許文耀 學號 : 許文耀 學號 : 張慧珍 學號 : 張慧珍 學號 : Next 個人簡介.
问题的提出: 例1 把十进制整数转换为二至十六之间的任一进制数输出。
计算机硕士专业基础—C语言 赵海英
实用数据结构基础 第3章 栈.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第二章 线性表.
第六章 技术创新与经济增长 本章主要问题 ---技术创新过程 ---技术创新分类 ---技术创新动力源 ---技术创新影响因素
慈禧药方(人参健脾丸) 【简介】:清代太医院的设制基本上沿袭了明朝的旧制,顺治1644年设太医院为独立的中央医事机构,为帝后及宫内人员诊视疾病、配制药物,也担负其他医药事务。此为宫廷处方,内容如下: 老佛爷 人参健脾丸 党参七钱 白术二钱 怀山药七钱 炒 薏米五钱六分 欠实五钱六分 广皮一钱.
Linked List Operations
第3章 栈和队列 3.1 栈 3.2 队列 3.3 应用.
單向鏈結串列 Singly Linked Lists.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
第3章 栈和队列.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
第三章 栈和队列 Stack and Queue
第三章栈和队列 栈 队列 递归.
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言程序设计 第十二章 位运算.
第11章 查找 主要知识点 查找的基本概念 静态查找表 动态查找表 哈希表.
資料結構 第5章 佇列.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
本 章 说 明 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队 列 本 章 小 结 返回主目录.
第2章 线性表 2.1 线性表的基本概念 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 线性表的应用 2.5 有序表 本章小结.
第3章 栈和队列(二) 1/.
第三章 栈和队列 栈和队列是两种重要的数据结构。
第3章 栈和队列 丽水学院工学院.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列.
第3章 栈和队列(一).
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
第3章 栈和队列 3.1 栈 本章主题:栈和队列的应用 教学目的:掌握栈和队列的应用方法,理解栈的重要作用
数 据 结 构 刘家芬 Sept 2012.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
#define STACK_INIT_SIZE 10
資料結構 第4章 堆疊.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
数据结构概论 第3章 栈和队列 董黎刚 浙江工商大学信电学院 2019年2月25日.
第四章 栈和队列 4.1栈 4.2栈的应用 4.3队列 4.3队列应用.
计算机软件技术基础 数据结构与算法(3).
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
顺序表的删除.
数据结构习题课 信息学院 赵明 2005年秋.
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
第 四 讲 线性表(二).
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第二章 线性表.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第 六 讲 栈和队列(一).
本章的基本内容是: ⑴栈和队列的定义及操作特性; 第3章 特殊线性表—栈、队列和串 ⑵栈和队列的两种存储方法和基本运算的实现;
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第七讲 栈和队列(二) 1/.
第3章 栈和队列 3.1 栈 3.2 队列.
Chapter 2 Entity-Relationship Model
第7章 图.
昆山爱达人信息技术有限公司 QQ: 本节内容 1.栈的链式存储结构及实现 2.栈的应用.
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
第二章 线性表 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
C语言基础学习 从外行到入门.
Presentation transcript:

陈海明 副教授 信息学院 计算机系 http://EEE.chenhaiming.cn 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系 http://EEE.chenhaiming.cn

数据结构 线性表 栈 队列 顺序表 任意位置 插入和删除 链 表 线性结构 顺序表 顶部插入 顶部删除 入栈 出栈 链 表

栈 出栈 入栈 栈顶(Top):进行插入、删除操作的一端。动态变化。 栈底(Bottom) 3 2 1

栈 栈的操作特点:先进后出(FILO) 4 3 若进栈顺序为1234,能否得到3142的出栈顺序? 2 1

栈 栈初始化 基本操作 销毁栈 判栈空 入栈 出栈 取栈顶元素

顺序栈 s->top++; y=s->data[s->top]; s->top--; s->data[++s->top]=x; y=s->data[s->top--]; s->data[s->top]=x; top C top B top A A top top=-1 top=0 top=2

顺序栈 #define MAX 100 //顺序栈的最大容量 typedef struct { int data[MAX]; //栈的存储空间 int top; //栈顶 }SeqStack; SeqStack *Init_SeqStack() //栈初始化 { SeqStack *s; //定义一个指向顺序栈的指针 s=(SeqStack*)malloc(sizeof(SeqStack)); s->top=-1; return s; }

顺序栈 int Empty_SeqStack(SeqStack *s) //判栈空 { if(s->top==-1) return 1; else return 0; } int Push_SeqStack(SeqStack *s,int x) //入栈 { if(s->top==MAX-1) return 1; else{ s->top++; s->data[s->top]=x; return 0; }

顺序栈 int Pop_SeqStack(SeqStack *s, int *y) //出栈 { if(Empty_SeqStack(s)) return 1; else{ *y=s->data[s->top]; s->top--; return 0; }

栈 数制转换问题 栈的应用 表达式求值 递归问题 迷宫问题的求解

顺序栈 N N/8 N%8 45 7 45 5 5 5 0 5 【例题】数制转换问题。将十进制转换成r进制。 算法: 45 7 45 5 5 5 0 5 算法: 步骤1、当N!=0时,将N%r压入栈,接着执行步骤2;若N=0,则将栈的内容依次出栈,算法结束; 步骤2:用N/r代替N。

顺序栈 int main() { int N,r; scanf("%d%d",&N,&r); conversion(N,r); 例题 顺序栈 void conversion(int N,int r) { int s[MAX],top; int x; top=-1; //初始化栈 Ehile(N) { s[++top]=N%r; //入栈 N=N/r; } Ehile(top!=-1) { x=s[top--]; printf("%d", x); void conversion(int N,int r) { SeqStack *s; int x; s=Init_SeqStack(); Ehile(N) { Push_SeqStack(s, N%r); N=N/r; } Ehile(!Empty_SeqStack(s)) { Pop_SeqStack(s,&x); printf("%d", x); int main() { int N,r; scanf("%d%d",&N,&r); conversion(N,r); printf("\n"); return 0; }

链栈 ^ typedef struct node { char data; struct node *next; }LinkStack; top ^ 链栈示意图 头结点 栈底结点 typedef struct node { char data; struct node *next; }LinkStack; 栈顶结点 void Init(LinkStack *s) //栈初始化 { s=(LinkStack*)malloc(sizeof(LinkStack)); s->next=NULL; }

链栈 int Empty_LinkStack(LinkStack *s) //判栈空 { if(s->next==NULL) return 1; else return 0; } void Push(LinkStack *s,char x) //入栈 { LinkStack *p; p=(LinkStack*)malloc(sizeof(LinkStack)); p->data=x; p->next=s->next; s->next=p; }

链栈 int Pop(LinkStack *s,char *x) //出栈 { LinkStack *p; if(s->next==NULL) return 1; else{ p=s->next; *x=p->data; s->next=p->next; free(p); return 0; }

栈链 int GetTop(LinkStack *s,char x) //取栈顶元素 { if(s->next==NULL) return 1; x=s->next->data; return 0; }

链栈 判断输入的表达式中括号是否配对(假设只含有左右圆括号)。 int match(char exp[],int n) { 初始化链栈 { 初始化链栈 Ehile(i<n) { if(exp[i]==‘(’) 入栈; else if(exp[i]==')') { 若栈顶有元素可取 { 若取出的元素不是左括号,则配对失败; 否则,左括号出栈,完成一组括号配对; } 否则 return 1; //取栈顶元素下溢时返回1 i++; if(栈空) return 0; //栈空时返回0 else return 2;

int match(char exp[],int n) { int i=0; char x; LinkStack *st=NULL; Init(st); Ehile(i<n) { if(exp[i]=='(') Push(st, exp[i]); else if(exp[i]==')') { if(GetTop(st,x)==1) if(x!='(') return 0; else Pop(st,&x); } else return 1; //取栈顶元素下溢时返回1 i++; if(Empty_LinkStack(st)==1) return 0; //栈空时返回0 else return 2;

栈 数制转换问题 栈的应用 表达式求值 递归问题 迷宫问题的求解

栈的应用 表达式求值 包含四则运算和括号 10-2*3 (10-2)*3 - # * 结果 * 3 - 2 6 # 4 10

运算优先级   + - * / ( ) # > < =  E E 

运算优先级   + - * / ( ) [ ] { } # > < = E M  M  >