以下都是小旭大一下学期在家上网课的时候,根据教授所出的试题,一份份手写搞成图片粘进word里面的,现在免费做一个小汇总,主要涵盖了一些简单的介绍和10次线下作业及2次思维训练,涵盖了几乎所有的经典习题类型,方便大家借鉴交流~
一、定义: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
二、研究对象:
1.数据的逻辑结构: 指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括: 集合结构(数据结构中的元素之间除了"同属一个集合" 的相互关系外,别无其他关系) 线性结构(数据结构中的元素存在一对一的相互关系) 树形结构(数据结构中的元素存在一对多的相互关系)
图形结构(数据结构中的元素存在多对多的相互关系)2.数据的物理结构: 指数据的逻辑结构在计算机存储空间的存放形式。
数据的物理结构: 数据结构在计算机存储器中的具体实现,是逻辑结构的表示(又称存储映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与各数据项对应的子位串称为数据域(data
field)。因此,节点是数据元素的机内表示(或机内映像)。关系的机内表示(映像方法): 数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。
3.数据结构的运算(这里就不一一赘述啦)
【简单定义、数据的两种存储方式、ADT三元组、二分归并排序的公式推导及复杂度求解】
typedef int Status;
typedef int ElemType;
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3){
T=(ElemType *)malloc(3 *sizeof(ElemType));
if(!T) exit(OVERFLOW);
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
【顺序表的插入删除平均移动元素次数、单循环链表删除节点的操作、各表的存储方式】
SqStack *s
(s->top)-(s->base)
s->top
(s->top)++
1
【循环队列的优点及判空满、单循环链表表示链队时头尾指针出入队的操作时间、定义顺序队列的代码补充】
【求矩阵的向量copt值、求广义表深度&长度&表头表尾、用head()&tail()函数取出LS中原子的运算命令组合】
【连通图、无向图、连通分量、最小生成树(Prim和Krucskal算法)】
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define null 0
using namespace std;
int i,j,k,n,m,t,status,a[10000],b[10000];
typedef struct {
int *elem,length,size;
}SqList;
int ListLength(SqList SL) {
if(SL.elem!=null) return SL.length;
else return 0;
}
void GetElem(SqList SL,int i,int &e) {
if(i<0||i>ListLength(SL)) return ;
e=SL.elem[i-1];
}
int InitList(SqList &SL) {
SL.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(SL.elem==null) return 0;
SL.length=0;
SL.size=LIST_INIT_SIZE;
return 1;
}
//插入操作
int ListInsert(SqList &SL,int i,int e) {
int *newbase,*p,*q;
int len=ListLength(SL);
if(i<1||i>len+1) return 0;
if(SL.length>=SL.size)
{
newbase=(int *)realloc(SL.elem,(SL.size+LISTINCREMENT)*sizeof(int));
if(newbase==null) return 0;
SL.elem=newbase;
}
p=&SL.elem[i-1];
q=&SL.elem[len-1];
for(;q>=p;q--) *(q+1)=*q;
*p=e; SL.length++;
}
void Merg(SqList La,SqList Lb,SqList &Lc) {
InitList(Lc);
i=j=1;
k=0;
La.length = ListLength(La);
Lb.length = ListLength(Lb);
while((i<=La.length)&&(j<=Lb.length))
{
GetElem(La,i,a[i]);
GetElem(Lb,j,b[j]);
if(a[i]<=b[j]) {
ListInsert(Lc,++k,a[i]); ++i;}
else
{
ListInsert(Lc,++k,b[j]); ++j;}
}
while(i<=La.length) {
GetElem(La,i,a[i]);
ListInsert(Lc,++k,a[i]);
i++;
}
while(j<=Lb.length) {
GetElem(Lb,j,b[j])A;
ListInsert(Lc,++k,b[j]);
j++;
}
}//MergeList
void traverse(SqList SL) {
for(i=0; i<SL.length; i++)
cout<<SL.elem[i]<<" ";
}
int main()
{
SqList La,Lb,Lc;
status=InitList(La);
if(status==0)
cout<<"SqList Init failed!";
status=InitList(Lb);
if(status==0)
cout<<"SqList Init failed!";
status=InitList(Lc);
if(status==0)
cout<<"SqList Init failed!";
cin>>m>>n;
for(i=1; i<=m; i++) {
cin>>t;
ListInsert(La,i,t);
}
for(i=1; i<=n; i++) {
cin>>t;
ListInsert(Lb,i,t);
}
traverse(La);
cout<<endl;
traverse(Lb);
Merg(La,Lb,Lc);
traverse(Lc);
return 0;
}
运行结果:
【大家在掌握理论知识之后,可以结合下方链接的文章巩固应用所学的知识,进入实战演练,明确不同篇章的具体要求,在自己的编码能力上更上一个层次 】
手把手教你写数据结构八大实验报告