例2-1 利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B。
void union(List &La,List Lb) {
La-len=listlength(La);
Lb-len=listlength(Lb);
for(I=1;Igetelem(lb,I,e);
if(!locateelem(la,e,equal))listinsert(la,++la-en,e)
}
}
算法2.2
例2-2 巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列。
此问题的算法如下:
void mergelist(list la,list lb,list &lc)
initlist(lc);
I=j=1;k=0;
la-len=listlength(la);
lb-len=listlength(lb);
while((I
getelem(la,I,ai);getelem(lb,j,bj);
if(aielse{listinsert(lc,++k,bj);++j;}
}
while(Igetelem((la,I++,ai);listinsert(lc,++k,ai);
}
while(jgetelem((lb,j++,bj);listinsert(lc,++k,bi);
}
}
顺序栈的类型定义如下:
# define StackSize 100
typedef char datatype;
typedef struct {
datatype data[stacksize];
int top;
}seqstack;
设S是SeqStack类型的指针变量。若栈底位置在向量的低端,即s–>data[0]是栈底元素,那么栈顶指针s–>top是正向增加的,即进栈时需将s–>top加1,退栈时需将s–>top 减1。因此,s–>toptop =stacksize-1表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称“上溢”;当栈空时再做退栈运算也将产生溢出,简称“下溢”。上溢是一种出错状态,应该设法避免之;下溢则可能是正常现象,因为栈在程序中使用时,其初态或终态都是空栈,所以下溢常常用来作为程序控制转移的条件。
3、判断栈满
int stackfull(seqstack *s)
{
return(s–>top==stacksize-1);
}
4、进栈
void push(seqstack *s,datatype x)
{
if (stackfull(s))
error(“stack overflow”);
s–>data[++s–>top]=x;
}
1、置空栈
void initstack(seqstack *s)
{
s–>top=-1;
}
2、判断栈空
int stackempty(seqstack *s)
{
return(s–>top==-1);
}
5、退栈
datatype pop(seqstack *s)
{
if(stackempty(s))
error(“stack underflow”);
x=s–>data[top];
s–>top--;
return(x)
//return(s–>data[s–>top--]);
}
6、取栈顶元素
Datatype stacktop(seqstack *s)
{
if(stackempty(s)
error(“stack is enpty”);
return s–>data[s–>top];
}
很显然你首先需要会一门编程语言。数据结构可以在不同的语言下实现,你可以看常用的数据结构教材,有的基于C,有的基于JAVA,所以在学习数据结构与算法之前,先学会一门语言是很有必要的事情。
因为数据结构书中很多内容用到的都是C语言伪代码,如果不懂C语言的话应该是看不懂的。多了解一下点C语言、数据类型、循环分支、结构体、指针等基本知识。一般来说,学习完c语言之后,效率会比较高点,另外数学好的话对理解算法是有好处的,动态规划啊,决策树啊之类的,具体的知识可以去小码哥李明杰了解。
因为数据结构是需要编程实现的。在内容上,数据结构很大一部分是独立的,但也有一部分与其它课程有关,比如离散数学,线性代数等,不过也没多大影响,书上都带有详细介绍。数据结构理论性很强,需要多动手写代码,理解好原理,而且会编程实现,这两方面都很重要。
有时间的话肯定是深入学习一下比较好,不过也不要有压力,大学的东西都是“平易近人”的,只要你认真学肯定是没问题的,顶多就是比基础好的人多花点时间。
数据结构的话跟C语言还有点关系,但是大部分人对数据结构都不会很了解,所以基本可以认为你们处于同一起跑线。
算法的话重要的是你的逻辑思维能力和数学功底,C语言只是实现算法的工具,只要算法理解透了,你可以用C++,可以用Java,甚至脚本语言Python,如果C语言基础好,只会使你实现算法的时候更加顺手,但算法的实现本不是算法学习的精髓,算法本身及逻辑能力的提高才是你需要重点关注的。
个人认为这已经是一本非常不错的教材了,看来你是C/C++的学习不是很深入,要注重程序编写的规范化,克服随意的缺点。
(1)非常重要。 这几乎就是本门课程的关键所在,也是实际解决问题的基本方法 (2)几乎和学没学过离散数学无关,而在于个人的逻辑思维能力、抽象思维能力(关键)和空间想像能力,而不是什么小聪明和歪门邪道,对解决问题不能有先入为主的直观解决想法,尽量阅读算法,领会精神,最好实际上机实现,对学习会有很大帮助 (3)算法基于C++语言,当然实际上机还有必要改进和丰富,但是基本已是最优化算法了,//后面是C++的注释方式,要不要随你便,书中只是为了便于教学理解 (4)算法着眼于解决过程的描述,是一种利用语言进行代替伪代码描述问题的方式,实际上机再依据需要补充定义变量 (5)Elemtype是最基本的数据类型,为了算法的通用这么使用,实际中依据需要进行,比如应用为 int,则应该补充 typedef int ElemType; 将其定义为 int 类型,这个参看 typedef 语句的用途 SElemType在书中是栈节点数据类型,也是依据需要再自己定义,类似的书中都只是通用性描述 相应教材还有一本习题和解答,可以去找找看 这本教材只是基本知识入门级别,后续可以根据自己的情况选择深入学习的资料 。
1. 数据结构中最基本的,栈(先进后出),队列(先进先出),二叉树,要知道二叉树的遍历,这个每年都考。
2.数据库中的基础知识,考一两道,主要是关系数据库的概念,什么m对n,DBMS之类的。
3.软件设计里的基础知识,什么高耦合什么的,具体什么忘了,你查查。
4.记得还考那些http,ftp,邮件协议SMTP、POP3这些,好像每年都有着一道,你看看,很简单,几下就好了。
目前能想到的就这些了,希望对你有帮助。
哦,填空题前5到跟选择题的前10道考的是一样的知识点,所以上面的这些知识点对前5到填空题同样有用~~~~~~~~~~~~~
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.647秒