数据结构期末复习-绪论,线性表,队列,栈

本文介绍了数据结构的基础知识,包括数据结构的定义、逻辑结构和存储结构,以及抽象数据类型的概念。重点讲解了线性表的顺序表和链表,分析了它们的优缺点,并探讨了栈和队列的操作特性,如顺序栈和链栈的进退栈操作,以及顺序队列和循环队列的进出队操作。
摘要由CSDN通过智能技术生成

第一章 绪论

1.数据结构的定义

数据:是描述客观事物的数和字符的集合

数据元素:数据的基本单位,也称为元素、结点、顶点或记录等,例如2211班中每个学生记录都可以是一个数据元素。

数据项:具有独立含义的数据最小单位,也被称为字段或域,多个数据项可以组成一个数据元素,例如,学号、姓名、性别、班号等数据项可以组成2211班中的每个数据元素(即学生记录)

数据对象:性质相同的数据元素的集合,它是数据的一个子集。

数据结构:所有数据元素及数据元素之间的关系。

数据结构通常包括以下几个方面

  1. 数据的逻辑结构:由数据元素之间的逻辑关系构成

  2. 数据的存储结构:数据元素及其关系在计算机存储器中的存储表示,也成为数据的物理结构

  3. 数据的运算:施加在该数据上的操作。

2.逻辑结构、存储结构和运算的关系

逻辑结构和存储结构是相互独立的,同一种逻辑结构可以采用不同的存储结构来实现。

例如,线性表这种逻辑结构可以采用顺序存储结构或链式存储结构来实现。

而不同的存储结构会影响运算的实现方式和效率

例如,在顺序表中查找一个元素的时间复杂度为O(n),而在有序表中使用折半查找则可以将时间复杂度降为O(logn)。

3.抽象数据类型

ADT = 逻辑结构 + 抽象运算(功能描述)

基本描述格式如下

ADT 抽象数据类型名

{

​ 数据对象:数据对象的声明

​ 数据关系:数据关系的声明

​ 基本运算:基本运算的声明

}

基本运算的声明格式:基本运算名(参数表):运算功能描述

例:一个复数的抽象数据类型

ADT Complex

{

​ 数据对象:

​ D={e1,e2|e1,e2均为实数}

​ 数据关系:

​ R={<e1,e2>|e1是复数的实数部分,e2是复数的虚数部分}

​ 基本运算:

​ AssignComplex(&z,v1,v2):构造复数z,其实部和虚部分别为参数v1和v2的值。

​ Add(z1,z2,&sum):用sum返回两个复数z1,z2相加的结果。

}

算法的定义、特性、描述

定义:算法是对特定问题求解步骤的一种描述,它是指令的有限序列

特性

  1. 有穷性:在执行有穷步之后结束,且每一步都可在有穷时间内完成

  2. 确定性:对于相同的输入只能得出相同的输出,不能有二义性

  3. 可行性:算法的每一个操作都能被机械地执行

  4. 有输入:一个算法有0个或多个输入

  5. 有输出:一个算法有0个或多个输出

    第4、5点表示存在数据处理

描述:算法描述是指对算法进行清晰、简洁、易懂的表述。常用的算法描述方法有自然语言描述、流程图、伪代码和程序描述等。

注意:&,引用型形参

void swap(int &x,int &y)

{

​ int tmp =x;

​ x=y;y=tmp;

}

对引用变量x,y的改动也是实际变量的改动,区别与 * x * y

算法的时间复杂度分析

ps:找几道题做一下,

第二章 线性表

1.顺序表及其基本运算算法,顺序表的优缺点

定义:线性表的顺序存储结构简称顺序表

基本运算算法

#define MaxSize 50

typedef int ElemType;

typedef struct 

{
   

  ElemType data[MaxSize];//存放线性表中的元素

  int length;       //存放线性表的长度

}SqList;          //顺序表类型

//初始化线性表 O(1)

void InitList(SqList *L)

{
   

  L = (SqList*)malloc(sizeof(SqList));//分配存放线性表的空间

  L->length = 0;//置空线性表的长度为0

}

//销毁线性表 O(1)

void DestroyList(&L)

{
   

  free(L);//释放L所指的顺序表空间

}

//判断线性表是否为空表 O(1)

bool ListEmpty(SqList *L){
   

  return(L->length == 0);

}

//求线性表的长度 O(1)

int ListLength(SqList *L){
   

  return(L->length);

}

//输出线性表DispList(L) O(N)

void DispList(SqList *L){
   

  if(ListEmpty(L))   return;

  for(int i = 0; i < L->length;i++){
   printf("%d",L->data[i]);

  }

  printf("\n");

}

//求线性表中的某个数据元素值 O(1)

bool GetElem(SqList *L,int i,ElemType &e)

{
   

  if(i<1 || i>L->length){
   return false;

  }

  e = L->data[i-1];

  return true;

}

//按元素值查找 O(N)

int LocateElem(SqList *L,ElemType e)

{
   

  int i = 0;

  while(i < L->length && L->data[i]!=e)

  {
   

​    i++;

  }

  if(i>=L->length)

  {
   return 0; //未找到返回0

  }

  else

  {
   return i+1; // 找到后返回逻辑序号

  }

}

//插入数据元素 O(N)

//SqList* &L 对结构体类型指针的引用

bool ListInsert(SqList* &L,int i,ElemType e){
   

  int j;

  if(i < 1|| i>L->length+1){
   return false;

  }

  i--;//将逻辑序号转化为物理序号

  for(j=L->length;j>i;j--){
   

​    L->data[j] = L->data[j-1];//后移

  }

  L->data[i] = e;

  L->length++;

  return true;

}
//删除数据元素 O(N)
bool ListDelete(SqList *&L,int i,ElemType &e){
   
    int j;
    if(i<1||i>L->length)
    return false;
    i--;
    e=L->data[i];
    for(j=i;j<L->length -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值