1.求一篇关于<数据结构算法演示课件>的论文
绪 论 1 1 课件系统分析 2 1.1 Authorware开发的方法 2 1.1.1 建立适合自身特点的素材库 2 1.1.2 有效地利用其它载体的信息 2 1.1.3 合理使用Authorware的自有功能 3 1.2 系统的可行性研究 3 1.2.1 技术可行性 3 1.2.2 操作可行性 3 1.2.3 法律可行性 3 2 总体结构说明 4 2.1 课件结构简介 4 2.2 课件的结构图 5 3 模块的详细功能设计 10 3.1菜单栏的设计 10 3.1.1 “声音”菜单的设计 11 3.1.2 “跳转”菜单的设计 13 3.1.3 “帮助”菜单的设计 13 3.1.4 “退出”菜单的设计 15 3.2 整体框架设计 16 3.2.1 框架图标和导航图标 16 3.2.2 整体结构设计 18 3.3 课件内容的设计 24 3.3.1 课件的主要内容 24 3.3.2 具体算法的演示 25 4 使用说明书 30 结 论 31 致 谢 32 参考文献 33 附录A:英文翻译 34 参考资料:1. 严蔚敏,吴伟民.数据结构(C语言版) 北京:清华大学出版社,2000年 2. 张选平,雷咏梅.数据结构 机械工业出版社,1999年 3. 黄国瑜,叶乃青.数据结构(C语言版) 北京:清华大学出版社,2001年 4. 张岩.Authorware 6.5高级应用实例精解 北京:清华大学出版社,2002年 5. 程小丫.Authorware 6.5多媒体课件制作导航 海洋出版社,2003年 6. 陈朝,葛宁.Authorware 6.5短期培训教程 北京:希望电子出版社,2001年 7. Wirth N.Algorithms + Dada Structures =Programs. Prentice 简单介绍:随着多媒体计算机和网络技术的迅速发展,应用多媒体CAI技术已经成为广大教育工作者改革教学方法,提高教学质量的首选途径。
多媒体演示课件是多媒体教育发展到一定阶段的产物,也是目前多媒体教育改革的一个标志。利用多媒体演示课件,可以代替传统的黑板板书,而且还能把各种与教材有关的多媒体素材融合在演示课件中,在增加知识信息的同时,大大提高了课堂效率。
Authorware是美国的Macromedia公司在20世纪90年代开始推出的一款操作方便、功能强大的多媒体制作工具软件。 本课件是利用Authorware为开发工具,制作《数据结构》这门课程的CAI课件,《数据结构》这门课程的难点在于概念比较抽象,算法比较复杂,难以理解。
为了方便用户理解,本课件充分利用了Authorware的交互性,制作了大量算法的动态演示,对于学生加深对算法的理解是十分必要的。
2.数据结构算法实现及解析 表达式求值
#include #include #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 50 char ops[7]={'+','-','*','/','(',')','#'}; /*运算符数组*/ int cmp[7][7]={{2,2,1,1,1,2,2}, /*用来进行比较运算符优先级的矩阵,3代表'=',2代表'>',1代表'top =-1; } void InitStackn(nSeqStack *S) /*初始化运算数栈*/ { S->top =-1; } int IsEmpty(SeqStack *S。
#include #include #include #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 50 char ops[7]={'+','-','*','/','(',')','#'}; /*运算符数组*/ int cmp[7][7]={{2,2,1,1,1,2,2}, /*用来进行比较运算符优先级的矩阵,3代表'=',2代表'>',1代表'top =-1; } void InitStackn(nSeqStack *S) /*初始化运算数栈*/ { S->top =-1; } int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/ { return(S->top==-1?TRUE:FALSE); } int IsEmptyn(nSeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/ { return(S->top==-1?TRUE:FALSE); } /*判栈满*/ int IsFull(SeqStack *S) /*判断栈S为满栈时返回值为真,反之为假*/ { return(S->top==Stack_Size-1?TRUE:FALSE); } int IsFulln(nSeqStack *S) /*判断栈S为满栈时返回值为真,反之为假*/ { return(S->top==Stack_Size-1?TRUE:FALSE); } int Push(SeqStack *S, char x) /*运算符栈入栈函数*/ { if (S->top==Stack_Size-1) { printf("Stack is full!\n"); return FALSE; } else { S->top++; S->elem[S->top]=x; return TRUE; } } int Pushn(nSeqStack *S, int x) /*运算数栈入栈函数*/ { if (S->top==Stack_Size-1) { printf("Stack is full!\n"); return FALSE; } else { S->top++; S->elem[S->top]=x; return TRUE; } } int Pop(SeqStack *S, char *x) /*运算符栈出栈函数*/ { if (S->top==-1) { printf("运算符栈空!\n"); return FALSE; } else { *x=S->elem[S->top]; S->top--; return TRUE; } } int Popn(nSeqStack *S, int *x) /*运算数栈出栈函数*/ { if (S->top==-1) { printf("运算符栈空!\n"); return FALSE; } else { *x=S->elem[S->top]; S->top--; return TRUE; } } char GetTop(SeqStack *S) /*运算符栈取栈顶元素函数*/ { if (S->top ==-1) { printf("运算符栈为空!\n"); return FALSE; } else { return (S->elem[S->top]); } } int GetTopn(nSeqStack *S) /*运算数栈取栈顶元素函数*/ { if (S->top ==-1) { printf("运算符栈为空!\n"); return FALSE; } else { return (S->elem[S->top]); } } int Isoperator(char ch) /*判断输入字符是否为运算符函数,是返回TRUE,不是返回FALSE*/ { int i; for (i=0;i='a'&&ch'、''; break; case 3: pri='='; break; case 0: pri='$'; printf("表达式错误!\n"); break; } return pri; } int Execute(int a, char op, int b) /*运算函数*/ { int result; switch(op) { case '+': result=a+b; break; case '-': result=a-b; break; case '*': result=a*b; break; case '/': result=a/b; break; } return result; } int ExpEvaluation() /*读入一个简单算术表达式并计算其值。optr和operand分别为运算符栈和运算数栈,OPS为运算符集合*/ { int a,b,v,temp; char ch,op; char *str; int i=0; SeqStack optr; /*运算符栈*/ nSeqStack operand; /*运算数栈*/ InitStack(&optr); InitStackn(&operand); Push(&optr,'#'); printf("请输入表达式(以#结束):\n"); /*表达式输入*/ str =(char *)malloc(50*sizeof(char)); gets(str); /*取得一行表达式至字符串中*/ ch=str[i]; i++; while(ch!='#'||GetTop(&optr)!='#') { if(!Isoperator(ch)) { temp=ch-'0'; /*将字符转换为十进制数*/ ch=str[i]; i++; while(!Isoperator(ch)) { temp=temp*10 + ch-'0'; /*将逐个读入运算数的各位转化为十进制数*/ ch=str[i]; i++; } Pushn(&operand,temp); } else { switch(Compare(GetTop(&optr),ch)) { case '': Pop(&optr,&op); Popn(&operand,&b); Popn(&operand,&a); v=Execute(a,op,b); /* 对a和b进行op运算 */ Pushn(&operand,v); break; } } } v=GetTopn(&operand); return v; } void main() /*主函数*/ { int result; result=ExpEvaluation(); printf("\n表达式结果是%d\n",result); }。
3.数据结构与算法分析
书上写的挺简单,不过要用到实际中去就困难了,这是最基本的东西是以后学习计算机的基础,就像大一要学习高数 大物一样,是一门基础课程~至于学到什么程度就看你自己对自己的要求啦!
(一)基本概念和术语
1.数据结构的概念
2.抽象数据结构类型的表示与实现
3.算法,算法设计的要求,算法效率的度量,存储空间要求。
(二)线形表
1.线形表的类型定义
2.线形表的顺序表示和实现
3.线形表的链式表示和实现
(三)栈和队列
1.栈的定义,表示和实现
2.栈的应用:数制转换,括号匹配,行编辑,迷宫求解,表达式求值
3.栈与递归实现
4.队列。
(四)串
1.串的定义,表示和实现
2.串的模式匹配算法
(五)树和二叉树
1.树的定义和基本术语
2.二叉树,遍历二叉树和线索二叉树
3.树和森林:存储结构,与二叉树的转换,遍历
4.霍夫曼树和霍夫曼编码
5.回溯法与树的遍历
(六)查找
1.静态查找表
2.动态查找表
3.哈希表
(七)图
1.图的定义和术语
2.图的存储结构
3.图的遍历
4.图的连通性问题
5.拓扑排序与关键路径
6.最短路径
(八)内部排序
1.排序的概念
2.插入排序
3.快速排序
4.选择排序:简单选择,树形选择,堆排序
5.归并排序
6.基数排序
7.各种排序方法的比较
4.数据结构算法设计
程序代码:有注释,自己对应改成自己的。
#include 第一个问 struct Btree { int data; struct Btree *left; struct Btree *right; }; int count(Btree *T) { Btree *st[50]; int top=-1; Btree *p; int sum=0; if(T!=NULL) { top++; st[top]=T; while(top>-1) { p=st[top]; top--; if(p->right!=NULL) { top++; st[top]=p->right; } if(p->left!=NULL) { top++; st[top]=p->left; } if(p->left==NULL && p->right==NULL) { sum++; } } return sum; } } 由于时间的关系,只能帮你第一个问了 所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。 其确切定义如下: 输入:n个记录R1,R2,…,Rn,其相应的关键字分别为K1,K2,…,Kn。 输出:Ril,Ri2,…,Rin,使得Ki1≤Ki2≤…≤Kin。 (或Ki1≥Ki2≥…≥Kin)。 这里,我们简单介绍几种排序方法,直接插入排序、希儿排序、冒泡排序、快速排序、直接选择排序,文中所提及的代码在IE6下测试通过。 直接插入排序基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。 从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。 算法描述 function InsertSort(arr) { //插入排序->直接插入法排序 var st = new Date(); var temp, j; for(var i=1; i-1 && (temp) < (arr[j])); arr[j+1] = temp; }//endif } status = (new Date() - st) + ' ms'; return arr; } 希尔排序基本思想 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。 所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d2 该方法实质上是一种分组插入方法。 算法描述 function ShellSort(arr) { //插入排序->希儿排序 var st = new Date(); var increment = arr.length; do { increment = (increment/3|0) + 1; arr = ShellPass(arr, increment); } while (increment > 1) status = (new Date() - st) + ' ms'; return arr; } function ShellPass(arr, d) { //希儿排序分段执行函数 var temp, j; for(var i=d; i-1 && (temp) < (arr[j])); arr[j+d] = temp; }//endif } return arr; } 再举个例子:#include "iostream.h" void shellSort(int *arr, int len, int *p, int len1); int main() { int num[15]={100,12,20,31,1,5,44,66,61,200,30,80,150,4,8}; int i; cout<<"待排数据d=(5,3,1): "; for(i=0;i<15;i++) { cout< 递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。 算法描述 function QuickSort(arr) { //交换排序->快速排序 if (arguments.length>1) { var low = arguments[1]; var high = arguments[2]; } else { var low = 0; var high = arr.length-1; } if(low < high){ // function Partition var i = low; var j = high; var pivot = arr[i]; while(i …… ③第i趟排序 第i趟排序开始时,。 文字实现基本思想:从右至左遍历树的每一个子树,若子树的又孩子的2个孩子为空,则为叶子节点,那么处理之,右子树道理相同代码如下:templete 第一个问struct Btree{ int data; struct Btree *left; struct Btree *right;};int count(Btree *T){ Btree *st[50]; int top=-1; Btree *p; int sum=0; if(T!=NULL) { top++; st[top]=T; while(top>-1) { p=st[top]; top--; if(p->right!=NULL) { top++; st[top]=p->right; } if(p->left!=NULL) { top++; st[top]=p->left; } if(p->left==NULL && p->right==NULL) { sum++; } } return sum; }}由于时间的关系,只能帮你第一个问了。 其实两者是相辅相成的,没有严格的要求先学哪个。 数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。一种数据结构如果脱离了算法,那还有什么用呢?实际上也不存在一本书单纯的讲数据结构,或者单纯的讲算法!当然两者也是有一定区别的,个人觉得算法更加的抽象一些,侧重于对问题的建模,而数据结构则是具体实现方面的问题了。 个人建议是一起学,虽然现在中国很多大学都是先学的数据结构,但是其不合理性是很明显的,这个也是我们学校一个比较争论的话题。在学的时候一定要自己有个认识,两者是同等重要的,不存在先学后学的问题。而且在学的过程中,更重要的是学习方法。 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType;typedef char Status;typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;Status InitStack(SqStack &S){S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}void ClearStack(SqStack &S){S.top=S.base;}bool StackEmpty(SqStack S){if(S.top==S.base)return TRUE;return FALSE;}Status Push(SqStack &S,SElemType e){if(S.top-S.base>=S.stacksize){S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; }*S.top++=e;return OK;}Status Pop(SqStack &S,SElemType &e){if(S.top==S.base)return ERROR;e=*--S.top;return OK;}void DestroyStack(SqStack &S){free(S.base); S.top=S.base; }void main(){SqStack S,D;char ch,c;InitStack(S);InitStack(D);printf("输入:\n");ch=getchar();while(ch!=EOF){while(ch!=EOF&&ch!='\n'){switch(ch){case '#':Pop(S,c);break;case '@':ClearStack(S);break;default:Push(S,ch);break;}ch=getchar();}//输入一行结束while(!StackEmpty(S)){Pop(S,c);Push(D,c);}printf("输出:\n");while(!StackEmpty(D)){Pop(D,c);printf("%c",c);}printf("\n输入:\n");if(ch!=EOF)ch=getchar();}DestroyStack(S);}这是我编的行编辑器,输入#表示取消前一个字符,输入@表示取消前面所有字符,希望对你做第一题有帮助逆序输出单链表(改变原单链表,就是你要的)#include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;void CreateList_L(LinkList &L,int n){int i;LinkList p,rear;L=rear=(LinkList)malloc(sizeof(LNode));L->next=NULL;for(i=1;idata);p->next=NULL;rear->next=p;rear=p;}}void PrintList(LinkList L){LinkList p; p=L->next;do{ printf("%d,",p->data);p=p->next;}while(p); printf("\n");}void nzlb(LinkList &L){LinkList p,q,r,head;head=L;r=L->next;p=L->next;while (p->next!=NULL){q=p->next; p->next=L; L=p; p=q; }p->next=L;r->next=NULL;head->next=p;L=head;}void main(){LinkList L;int n;printf("请输入单链表长度:");scanf("%d",&n);CreateList_L(L,n);printf("原始单链表:\n");PrintList(L);nzlb(L);printf("逆置后的单链表:\n");PrintList(L);}另外附上逆序输出但不改变原单链表的程序#include#includetypedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;void CreateList_L(LinkList &L,int n){int i;LinkList p,rear;L=rear=(LinkList)malloc(sizeof(LNode));L->next=NULL;for(i=1;idata);p->next=NULL;rear->next=p;rear=p;}}void PrintList(LinkList L){LinkList p; p=L->next;do{ printf("%d,",p->data);p=p->next;}while(p); printf("\n"); }void visit(LNode *p){if(p->next!=NULL)visit(p->next);printf("%d,",p->data);}void main(){LinkList L,p;int n;printf("请输入单链表长度:");scanf("%d",&n);CreateList_L(L,n);printf("原始单链表:\n");PrintList(L);printf("逆序输出单链表:\n");p=L->next;visit(p);printf("\n");}看起来很长,其实只要看一下关键部分就行了另外说一下,我的单链表是带头结点的要不带头结点稍微修改一下就行。 转载请注明出处众文网 » 数据结构算法实现毕业论文(求一篇关于的论文)5.数据结构算法设计
6.数据结构算法设计C++实现
7.数据结构,算法设计
8.数据结构算法设计
9.数据结构和算法
10.算法与数据结构