ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:19.06KB ,
资源ID:4189183      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4189183.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南审《数据结构课程教学设计》个人说明任务题目一览度版.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

南审《数据结构课程教学设计》个人说明任务题目一览度版.docx

1、南审数据结构课程教学设计个人说明任务题目一览度版第二章 线性表顺序表的操作1、 顺序表的建立(从键盘或者数组中导入数据)Status InitList(SqList &L) /构造一个空的顺序表 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; 2、 顺序表按照值查找位置int LocateElem(SqList L, ElemType e) /根据数据元素的值,返回它在线性

2、表L中的位置 int i=0; while (i=L.length)&(*(L.elem+i-1)!=e) i+; if (i=L.length) return i; else return(-1); 3、 顺序表按照序号查找元素的值Status GetElem(SqList L,int i,ElemType &e) /根据数据元素在线性表L中的位置,返回它的值 if(iL.length ) return ERROR; e=*(L.elem+i-1); return OK; 4、 顺序表数据元素的插入Status ListInsert(SqList &L,int i,ElemType e) /

3、 在L中第i个位置之前插入新的数据元素e,L的长度加1 ElemType *p,*q,*newbase; if(iL.length+1) return ERROR; if(L.length=L.listsize) newbase=(ElemType *)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1); for(p=&(L.elemL.length-1)

4、;p=q; -p) *(p+1)=*p; *q=e; +L.length ; return OK; 5、 顺序表数据元素的删除Status ListDelete(SqList &L,int i,ElemType &e) /删除L的第i个数据元素,并用e返回其值,L的长度减1 ElemType *q,*p; if(iL.length) return ERROR; p=&(L.elemi-1); e=*p; q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=*p; -L.length; return OK; 6、 顺序表数据元素的输出Status visit(S

5、qList L) /按序输出顺序表的各个元素值 int i; for(i=1;i=L.length;i+) printf(%d ,*(L.elem+i-1); coutnext=NULL; printf(请输入%d个数据n,n); for(i=n;i0;-i) p=(LinkList)malloc(sizeof(LNode); scanf(%d,&p-data); p-next=L-next; L-next=p; void CreateList2(LinkList &L,int n) / 正位序输入n个元素的值,建立带表头结构的单链线性表 int i; LinkList p,q; L=(Lin

6、kList)malloc(sizeof(LNode); L-next=NULL; q=L; printf(请输入%d个数据n,n); for(i=1;idata); q-next=p; q=q-next; p-next=NULL;2、单链表的输出Status visit(LinkList L) /按序输出单链表的各个元素值 LinkList p=L-next; while(p) printf(%d ,p-data); p=p-next; printf(n); return OK; 3、单链表结点的插入Status ListInsert(LinkList &L,int i,ElemType e)

7、 LinkList p,s;p=L;int j=0; while(p&jnext; +j; if(!p|ji-1)return ERROR; s=(LinkList)malloc(sizeof(LNode); s-data=e;s-next=p-next; p-next=s; return OK;4、单链表结点的删除Status ListDelete(LinkList&L,int i,ElemType e) LinkList p,q;p=L; int j=0; while(p-next&jnext; +j; if(!(p-next)|ji-1)return ERROR; q=p-next;p-

8、next=q-next; e=q-data;free(q); return OK;5、单链表中按照结点的值查找结点的位序int LocateElem(LinkList L,ElemType e) / 返回L中第1个值为e 的数据元素的位序,若这样的数据元素不存在,则返回值为0 int i=0; LinkList p=L-next; while(p) i+; if(p-data=e) return i; p=p-next; return 0; 6、单链表中按照结点的位序返回结点的值Status GetElem(LinkList L,int i,ElemType &e) / L为带头结点的单链表的

9、头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回 ERROR int j=1; LinkList p=L-next; while(p&jnext; j+; if(!p|ji) return ERROR; e=p-data; return OK; 7、单链表的初始化(新建一个只含头结点的单链表) Status InitList(LinkList &L) / 构造一个空的单链表L L=(LinkList)malloc(sizeof(LNode); if (!L) exit(OVERFLOW); L-next=NULL; return OK; 8、单链表的销毁(所有结点都要销毁)Statu

10、s DestroyList(LinkList &L) / 销毁单链表L LinkList q; while(L) q=L-next; free(L); L=q; return OK; 9、求单链表的长度int ListLength(LinkList L) / 返回L中数据元素个数 if(L=0) return 0; int i=0; LinkList p=L-next; while(p) i+; p=p-next; return i; 10、两个单链表的归并void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc) /已知线性表La和Lb中

11、的数据元素按值非递减排列 /归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排列 LinkList pa,pb,pc; pa=La-next;pb=Lb-next; Lc=pc=La; while(pa&pb) if(pa-datadata) pc-next=pa; pc=pa; pa=pa-next; elsepc-next=pb; pc=pb; pb=pb-next; pc-next=pa?pa:pb; free(Lb);第三章 栈和队列栈的操作1、 初始化一个顺序栈(从键盘或者数组中导入数据)Status InitStack(SqStack &S) S.base=(SElem

12、Type*)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base)exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;2、 判断栈是否为空Status StackEmpty(SqStack S) / 若栈S为空栈,则返回TRUE;否则返回FALSE if(S.top=S.base)return TRUE; else return FALSE;3、 取栈顶元素Status GetTop(SqStack S,SElemType &e) / 在教科书第47页 /

13、若栈S不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if(S.top=S.base)return ERROR; e=*(S.top-1); return OK;4、 元素进栈Status Push(SqStack &S,SElemType e) / 插入元素e为栈S新的栈顶元素。 if(S.top-S.base=S.stacksize) S.base=(SElemType*)realloc(S.base, (S.stacksize+STACK_INCREMENT)*sizeof(SElemType); if(!S.base)exit(OVERFLOW); S.top=S.bas

14、e+S.stacksize; S.stacksize+=STACK_INCREMENT; *S.top+=e; return OK;5、 元素出栈Status Pop(SqStack &S,SElemType &e) / 在教科书第47页 / 若栈S不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(S.top=S.base)return ERROR; e=*-S.top; return OK;6、 计算栈中数据元素的个数int StackLength(SqStack S) / 返回栈S的元素个数,即栈的长度 return S.top-S.base;递归1、 递归实现

15、阶乘int f(int n) if(n=0) return 1; else return (n*f(n-1);2、 递归实现链表的输出(正序、逆序)void RevPrint(LNode *head) if(NULL!=head) if(NULL!=head-next) RevPrint(head-next); printf(%dt,head-data); /逆序后输出void PrintList_L(LinkList L) if(L!=NULL) printf(%dt,L-data); PrintList_L(L-next); /正序输出3、 递归实现链表的逆序LinkList revers

16、e(LinkList p) LinkList q,h; if(p-next=NULL) return p; else q=p-next; h=reverse(q); q-next=p; p-next=NULL; return h; 4、 递归求链表的长度int ListLength(LinkList L) int len; if(!L) return 0; len=1+ListLength(L-next); return len;第六章 树和二叉树二叉树的操作(采用二叉链式存储)1、 二叉树的建立Status CreateBiTree(BiTree &T) / 算法6.4:按先序次序输入二叉树

17、中结点的值(可为字符型或整型,在主程中定义), char ch; scanf(%c,&ch); if(ch= ) T=NULL; else if(!(T=(BiTNode *)malloc(sizeof(BiTNode) exit(OVERFLOW); T-data=ch; CreateBiTree(T-lchild); CreateBiTree(T-rchild); return OK;2、 二叉树的遍历(四种)Status PreOrderTraverse(BiTree T,void(*Visit)(TElemType) / 初始条件:二叉树T存在,Visit是对结点操作的应用函数。修改算

18、法6.1 / 操作结果:先序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T) Visit(T-data); if(PreOrderTraverse(T-lchild,Visit) if(PreOrderTraverse(T-rchild,Visit) return OK; else return OK;Status InOrderTraverse(BiTree T,void(*Visit)(TElemType) / 初始条件:二叉树T存在,Visit是对结点操作的应用函数 / 操作结果:中序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T) InOrderTrav

19、erse(T-lchild,Visit); Visit(T-data); if(InOrderTraverse(T-rchild,Visit) return OK; else return OK;Status PostOrderTraverse(BiTree T,void(*Visit)(TElemType) / 初始条件:二叉树T存在,Visit是对结点操作的应用函数 / 操作结果:后序递归遍历T,对每个结点调用函数Visit一次且仅一次 if(T) PostOrderTraverse(T-lchild,Visit); if(PostOrderTraverse(T-rchild,Visit)

20、 Visit(T-data); return OK; else return OK;Status LevelOrderTraverse(BiTree T,void(*Visit)(TElemType) / 初始条件:二叉树T存在,Visit是对结点操作的应用函数 / 操作结果:层序递归遍历T(利用队列),对每个结点调用函数Visit一次且仅一次 LinkQueue q; QElemType a; if(T) InitQueue(q); EnQueue(q,T); while(!QueueEmpty(q) DeQueue(q,a); Visit(a-data); if(a-lchild!=NUL

21、L) EnQueue(q,a-lchild); if(a-rchild!=NULL) EnQueue(q,a-rchild); printf(n); return OK;3、 求二叉树高度int TreeDepth(BiTree T) int depth,depthleft,depthright; if(!T) depth=0; else depthleft=TreeDepth(T-lchild); depthright=TreeDepth(T-rchild); depth=1+(depthleftdepthright?depthleft:depthright); return depth;4

22、、 交换二叉树的左右子树Status exchange(BiTree T) /先序遍历 if(T!=NULL) if(T-lchild!=NULL|T-rchild!=NULL) BiTree *p,*q; p = exchange(T-lchild); q = exchange(T-rchild); T-lchild = q; T-rchild = p; return T; void exchanget(BiTree T) / 后序遍历 if(T!=NULL) if(T-lchild!=NULL|T-rchild!=NULL) BiTree *p,*q; q = T-rchild; p =

23、T-lchild; T-lchild = q; T-rchild = p; exchange(T-lchild); exchange(T-rchild); return T;5、 求二叉树的结点个数Status NodeNum(BiTree T,int *num) if (T) if(T-data) num+; if (NodeNum(T-lchild,num) if(NodeNum(T-rchild,num) return OK; return ERROR; else return OK; 6、 求二叉树的叶子数void CountLeaf(BiTree T,int &count) if(T

24、) if(T-lchild=NULL&T-rchild=NULL) count+; else CountLeaf(T-lchild, count); CountLeaf(T-rchild,count); 7、 按照目录形式输出二叉树 Status PrintTree(BiTree bt,int nLayer) /* 按竖向树状打印的二叉树 */ if(bt!=NULL) PrintTree(bt-lchild,nLayer+1); for(int i=0;idata); PrintTree(bt-rchild,nLayer+1); return OK;树的操作(采用左孩子右兄弟存储结构)1、

25、求树的深度int TreeDepth(CSTree T) / 初始条件:树T存在。操作结果:返回T的深度 int maxd,d; CSTree p; if(!T) return 0; else for(maxd=0,p=T-firstchild;p;p=p-nextsibling) if(d=TreeDepth(p)maxd) maxd=d; return maxd+1; 2、 求树中给定结点的右兄弟TElemType RightSibling(CSTree T,TElemType cur_e) / 初始条件:树T存在,cur_e是T中某个结点 / 操作结果:若cur_e有右兄弟,则返回它的右

26、兄弟;否则返回“空” CSTree f; f=Point(T,cur_e); if(f&f-nextsibling) return f-nextsibling-data; else return ;3、 树的后根遍历void PostOrderTraverse(CSTree T,void(*Visit)(TElemType) CSTree p; if(T) if(T-firstchild) PostOrderTraverse(T-firstchild,Visit); p=T-firstchild-nextsibling; while(p) PostOrderTraverse(p,Visit); p=p-nextsibling; Visit(T-data); 第九章 查找1、顺序查找法 int Search_Seq(SSTable ST,KeyType key) / 在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1