南信大计软院2020复试学习整理用(1)——数据结构 线性表

首先给出阿婆主搜集到的往年计软院的复试面试题目哈:

  1. 从软件工程角度谈谈继承有哪些好处?

  2. 数据结构中有哪几种逻辑结构及典型的代表是什么?

  3. TCP 和 UDP 的区别?

  4. 说出几种排序算法的优缺点

  5. 计算机网络分为几层?通常计算机网络设备中交换机工作在下面哪一层?

  6. 信息安全中有哪些加密算法

  7. 什么是最短路径问题?

  8. 简述迪杰斯特拉(Dijkstra)算法的基本思想
    可以看出面试中的题目范围还是很广泛的,有软件工程、计网、数据结构、信安。根据学长所说,基本传统408科目以及数据库还有一些热门科目包括毕设所涉及到的知识,都会提问。博主本人呢也提前联系了一个导师,咨询了复试事宜,导师说,面试涉猎面及其广泛。基本什么都有可能问一点。但是差距拉不开太大,叫博主认真复习笔试。可是在今年网上面试的趋势下,笔试或改为口头问答,如何复习成为一个问题。复习的侧重点、难点。所以,博主开始了这些工作。学习之余将重点整理,以防日后需要看方便。
    数据结构
    数据结构由三要素,逻辑结构、物理结构、操作。
    线性表
    线性表是最常见的线性结构。 属于一种逻辑结构。 而逻辑结构是可以独立于物理结构的,同样的一种逻辑结构可以用不同的物理结构实现。比如线性表可以用顺序结构以及链式结构实现。而其余的索引、散列则不常用。

    顺序表

    线性表的定义:有有限个数据元素组成的序列。
    顺序表:在逻辑上相连的两元素在物理结构上也相连。
    顺序表的实现:

typedef struct
Elemtype *elem;
int length;//线性表的长度
}sqList;

顺序表的优缺点:

优点:随机存储、存储密度大、
缺点:当定义之后长度就已确定了,不能进行更换。插入删除操作需要进行大量的移动。

顺序表的常用操作

查找、删除、插入、初始化、判空
查找可分为按序号查找、按值查找。
由于顺序表是随机存储结构,所以按序号查找的话,时间复杂度为O(1)。
按值查找:

int locate(sqList l,Elemtype e){
for(i=0;i<=L.length-1;i++)
	if(L.elem[i]==e) return i+1;
	return 0;
	}

插入(由于是顺序表,需要进行大量的插入)

Status List_Insert(sqList &L,int i,Elemtype e){
if(i<1||i>l.length) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(j=L.lenth-1;j>=i;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
L.length++;
return OK;

删除:

Status List_Delete(sqList &L,int i){
if(i<1||i>L.length) return ERROR;
if (L.length==0) return ERROR;
for(j=i;j<=L.length;j++){
L,elem[j-1]=L.elem[i];
L.length--;
return OK;
}

线性表的链式实现

为了解决顺序表的一些问题,比如插入删除需要移动大量的元素,以及在多项式运算上对于稀疏多项式的鸡肋,线性表也可以用链式存储结构实现,俗称链表。
链表的定义

typedef struct{
Elemtype data;
struct Lnode *next;
}*Lnode,Linklist;

链式表的常用操作
删除、插入、查找
由于链表是顺序存取结构。要对一个节点实行删除和插入操作,必须找到他的前驱节点。所以他们的时间复杂度都为O(n),只是一个用于移动一个用于查找,所以总的来说,用链表实现查找和删除会大幅度提高效率。
插入(伪代码):

Status ListInsert_L(LinkList &L,int i,ElemType e){
p=L;j=0;
while(p&&j<i-1){p=p->next;j++}//查找到想插入位置的前驱节点
if(!p||j>i-1) return ERROR;
s=new Lnode;
s->data=e;
s-next=p->next;
p-next=s;
return OK;
}

清空:

Status ClearList(LinkList & L){
LinkList p,q;
p=L->next;
while(p){
q=p->next;
delete(p);
p=q;
}
L->next=NULL;
return OK;
}

删除(伪代码)

//找到P的前驱节点s
s->next=p->next;
free(p);
return OK;

查找即顺序存取,按照顺序一个个的找就可。

单链表的建立

分为头插法(逆序)、尾插法(顺序)
头插法:
将新节点插入到链表前列伪代码如下

p->next=L->next;
L->next=p;

尾插法(将新节点插入尾部)

p->next=NULL;
r->next=p;
r=p;

链表的多种情况:
单循环链表,双循环链表。双向链表。
双向链表的删除、插入等功能,类比于单向链表,但是要遵循一个原则:***“先连后断”***
顺序表与链表的对比:
南信大计软院2020复试学习整理用(1)——数据结构 线性表_第1张图片

你可能感兴趣的:(复试)