数据结构算法c实现.docx
《数据结构算法c实现.docx》由会员分享,可在线阅读,更多相关《数据结构算法c实现.docx(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构算法实现计算机科学与技术系算法一学会简单开发与程序调式1算法二线性表操作3算法三单链表操作7算法四栈基本操作13算法五表达式求值18算法六队列操作24算法七稀疏矩阵运算27算法八广义表操作30算法九二叉树操作33算法十二叉排序树的操作39算法H图的操作45算法十二排序操作63算法十三查找操作67算法十四哈希表操作69算法一学会简单开发与程序调式1、目的 熟悉C或C+集成开发环境的基本命令及功能键,熟悉常用功能菜单命令 理解C或C+程序结构 理解函数声明、定义和调用方法 理解标准库函数、自定义函数 掌握参数的不同传送方式及作用2、要求 学习如何根据编译信息,定位语法错误 将警告与错误一律
2、看作错误 学习C或C+程序书写风格 写出上机调试后的体会3、内容(1)编程实现输出一组数的最大值(或最小值)参考程序如下:#include const int n=10;void main() int i,x,an;coutninput in 10 num:*;fbr(i=0;ivn;i+)cinai;x=a0;i=l;while(ix)x=ai;i+;coutM 10 num max is:xendl;(2)阅读下列程序,体会参数传递的变化,并上机调试。#include#includevoid fiinl(int a,int b);void fun2(int &a,int &b);void
3、fun3(int *a,int *b);void main()int x=5,y=10;coutnan zhi chuan song :endl;cout,main:Hsetw( 10),x=,setw(3)xsetw( 10)My=Msetw(3)yendl;funl(x,y);coutHmain:Hsetw( 10)Hx=,setw(3)xsetw( 10)My=Msetw(3)yendl; coutendl;coutny yong :Hendl;coutmain:Hsetw( 10)nx=Hsetw(3)xsetw( 10)My=nsetw(3)yendl;fim2(x,y);coutm
4、ain:Msetw( 10)nx=setw(3)xsetw( 10)My=Msetw(3)yendl; coutendl;coutnzhi zhen:Mendl;coutnmain:Hsetw( 10),x=,setw(3)xsetw( 10)Hy=,setw(3)yendl;fiin3(&x,&y);coutHmain:Hsetw( 10)Hx=,setw(3)xsetw( 10)Hy=Msetw(3)yendl; coutendl;)void fun 1 (int a,int b)a=a+b;b=2*a+3*b;coutMfun l:Msetw(l 0)na=,setw(3)asetw(
5、10 )Mb=Msetw( 3 )bendl; void fiin2(int &a,int &b)a=a+b;b=2*a+3*b;coutHfun2:nsetw( 10)na=setw(3)asetw( 10)Mb=Mset w(3 )bendl; void fun3(int *pa,int *pb)pa+=*pb;*pb-=l;coutHfun3:Msetw( 10)n*Pa=,setw(3)*pasetw(l 0)H*pb=Hsetw(3)*pbe ndl;算法二顺性表操作1、目的 会定义线性表的顺序存储类型 掌握线性表的基本运算和具体函数的定义2、要求 编写对线性表的建立、插入、删除、查
6、找等算法,并判断插入、删除的位置是否合 法。 认真编写源程序,并进行调试,写出输入、输出和溢出判断结果 写出上机调试后的体会3、内容编写线性表的顺序存储结构上的:初始化线性表、清空线性表、求线性表的长度、判 空、判满、查找、插入、删除、线性表的有序输出等算法。参考程序如下:#include #include typedef int elemtype; struct listelemtype *list;intlen;int maxsize;);void initlist(list &l,int ms) l.list=new elemtypems; if(!l.list) cerrMmemory
7、 allocation failure!Mendl; exit(l);)l.len=0;Lmaxsize=ms;void clearlist(list &1)l.len=0;int length(list &1) return Lien; int listempty(list &1) return l.len=0;int listfull(list &1) return l.len=l.maxsize;void looklist(list &1) for(int i=0;il.Ien;i+4-) coutvvl.listivv-; coutendl;)int findlist(list &l,
8、elemtype x) fbr(int i=O;i0) fbr(int i=l.len-l;i=0;i-) l.listi+l=Llisti;l.list0=x;)else if(k0) l.listl.len=x;else for(int i=0;il.len;i+) if(x=ij-)l.Ustj+l=l.list|j;l.listi=x;)l.len+;return 1;)int deletelist(Iist &l,elemtype &x,int k) if(listempty(l) return 0;if(k0) x=l.list0;fbr(int i=l;il.len;i-H-)
9、l.listi-l=l.listi;else if(k0) x=l.listl.len-l;else fbr(int i=0;i=l.len)return 0;else x=Llisti;fbr(int j=i+l;jLlen;j+)l.len;return 1;void outputlist(list &l,int m)int *b=new intl.len;int i,k;fbr(i=O;il.len;i-H-) bi=i;fbr(i=l;il.len;i-l-+)k=i-l;fbr(int j=i;jl.len;j-H-)if(m=l&l.listbjl.listbk)k=j;ifi(k
10、!=i-l)int x=bi-l;bi-l=bk;bk=x;fbr(i=O;iLIen;i-H-) coutl.listbit coutendl;)void main()const int ml=20;list a;initlist(a,ml);int i;elemtype x;coutninput 5 int num:;for(i=0;i5;i+) cinx;insertlist(a,x,-l);coutninput 2 int num:;cinx;insertlist(a,x, 1);cinx;insertlist(a,x, 1);looklist(a);coutnuporder sort
11、:; outputlist(a,l);coutndownorder sort:;outputlist(a,0);list b;initlist(b,ml);for(i=O;ia.len;i-H-)insertlist(b,a.listi,O);looklist(b);if(deletelist(a,x,l)cout*delete front!Mendl;elsecoutHdelete fale!endl;looklist(a);ifdeletelist(a,x,-l)coutdelete rear!Hendl;elsecoutHdelete fale!*endl;looklist(a);cou
12、tinput a del num:; cinx;if|deletelist(a,x,O)cout*delete success!Mendl;elsecoutdelete fale!Hendl;looklist(a);算法三单链表操作1、目的 会定义单链表的结点类型 掌握对单链表的一些基本操作和具体函数的定义 充分利用C或C+语言的特点,提高程序的可移植性2、要求 编写对单链表的初始化、插入、删除、查找等算法。 认真编写源程序,并进行调试,写出输入、输出结果 写出上机调试运行分析及功能。3、内容编写单链表:初始化单链表、清空单链表、求单链表的长度、判空、查找、插入、 删除、线性表的有序输出等算法
13、。参考程序如下:#include#includetypedef int elemtype;struct Inode elemtype data;Inode *next;);void initlist(lnode *&hl) Inode *p=new Inode;p-next=NULL;hl=p;hl-next=NULL;void clearlist(Inode *&hl)Inode *p,*q;p=hl-next;while(p!=NULL) q=p-next;delete p;p=q;hl-next=NULL;int lissize(lnode *hl) int i=0;Inode *p=h
14、l-next;while(p!=NULL)i;p=p-next;return i;int listempty(lnode *hl) return hl-next=NULL;)elemtype getelem(Inode *hl,int i) cerrpos is out range !endl;exit( 1);)Inode *p=hl-next;intj=O;while(p!=NULL)j+;if(j=i)break;p=p-next;)ifi(p=NULL) cerrnpos is out range!Hendl; exit(l);)return (p-data);)void insert
15、rear(Inode *hl,elemtype x) Inode *q=new Inode;q-data=x;q-next=NULL;Inode *p=hl;while(p-next!=NULL)p=p-next;p-next=q;)void looklist(lnode *hl)Inode *p=hl-next;while(p!=NULL) coutp-datan p=p-next;)coutendl;)int findlist(lnode *hl,elemtype &x) Inode *p=hl-next;while(p!=NULL) if(p-data=x) x=p-data;retur
16、n 1;)elsep=p-next;return 0;void insertlist(lnode *hl,elemtype x,int i) cerrnpos is out range!Mendl; exit(l);)Inode *p,*q;intj=O;P=hl;while(p-next!=NULL)if(j=i) break;p=p-next;if(j=i) q=new Inode;q-data=x;q-next=p-next;p-next=q;else cerrHpos is out range!Hendl; exit(l);void deletelist(lnode *hl,int i
17、) Inode *p=hl;intj=O;while(p-next !=NULL&jnext;j+;if(ji-l|p-next=N ULL) cerr,error! Mendl;exit( 1);)Inode *q=p-next;p-next=q-next;delete q;void sortlist(Inode *hl,int k) Inode *head=new Inode;head-next=N ULL;head-data=hl-next-data;fbr(lnode *p=hl-next-next;p;p=p-next) Inode *q=new Inode;q-data=p-dat
18、a;Inode *cp=head;Inode *ap=NULL;while(cp) if(k=l)ifl(q-datadata) break;else ap=cp; cp=cp-next;else ifi(q-datacp-data) break;else ap=cp; cp=cp-next;)ifiap=NULL) q-next=head; head=q; else q-next=cp; ap-next=q; )Inode *r=new Inode;r-next=head;head=r;looklist(head);clearlist(head);)void main()Inode *hl;
19、initlist(hl);int i;elemtype x;coutninput in 5 num:;fbr(i=O;i5;i+) cinx; insertrear(hl,x);)coutHinput 2 num:;cinx;insertlist(hl,x, 1); cinx;insertlist(hl,x,l); looklist(hl);sortlist(hl,l);sortlist(hl,0);算法四栈基本操作1、目的:掌握栈的存储表示方式和栈基本操作的实现方法2、要求:栈的基本操作实现方法,栈的应用3、内容:栈的实现栈的顺序存储。#include#include#include# de
20、fine ERROR 0# define TRUE 1# define FALSE 0# define OK 1# define EQUAL 1/define OVERFLOW-1# define STACK_INIT_SIZE 100# define STACKINCREMENT 10typedef int Status ;struct STU char name 20;char stuno10;int age;int score;);typedef struct STU SElemType;struct STACK SElemType *base;SElemType *top;int st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 实现
限制150内