DataStructure

by MarkfuGod

Contiguous List(linear Construct)

$$ \begin{gather} 线性关系:结构中数据元素之间存在着一对一的关系 \\ 用指针来实现链式的存储结构(既有数值的内容,也有下一个数据的地址)\\ \end{gather} $$

$$ 抽象数据类型(ADT):Abstract\_Data\_Type $$

ADT List{
  数据对象:D = {a_i|a_i \in Elemset, i = 1,2,3...,n};
  数据关系:R = {<a_i-1,a_i>| a_i-1,a_i \in D(i = 2,3,...,n)}
  基本操作:
  InitList(&L);
 DestroyList(&L);
  ListInsert(&L,i,e);//i在1到i+1的位置,在i之前插入新的数据元素e,L长度加一
  ListDelete(&L,i,&e);//i在1到n的位置,删除第i个数据元素,并e返回其值,L长度-1
  ListTraverse(&L,visited());//对线性表中每个元素调用visited();
  ListEmpty(L);
  ListLength(L);
  GetElem(L,i,&e);//用e返回L中第i个数据元素的值
  LocateElem(L,e,compare());//返回L中第一个与e满足compare()的数据元素的位置序号
  PriorElem(L,cur_e,&pre_e);//cur就是current,pre_e返回的是他的前驱(注意cur不是一第一个,否则失败)
  NextElem(L,cur_e, &next_e);
  ... etc//FIXME: 等待补充;
}ADT List

Initialization

$$ \begin{gather} Loc(a_{i+1}) = Loc(a_i) + l\\ 常用:Loc(a_i)=Loc(a_1)+(i-1)\times l \\优点:找地址十分方便,只需进行一次运算,时间复杂度为O(1); \\任意元素可以随机存取,地址连续,依次存放,类型相同::数组 \\线性表表长可变,而数组长度不可以动态定 \end{gather} $$

#define List_Init_Size 100
typedef struct{
  ElemType elem[List_Init_Size];
  int length;
}SqList;
类c语言操作的补充
typedef struct{
  ELemType data[];//ELemType:可以是char,float
  //typedef chae Elemtype
  int length;
}
typedef struct {
  ElemType *data;//想想上学期讲指针的那时候,可以用data存储数据的首地址,之后开辟空间
  int length;
}SqList;//不要忘了加载 stdlib.h!
 /*---------------------------------------------------------*/
  #c++的动态存储分配
  new 类型名T(初值列表) int *p1 = new int; or int *p1 = new int(10);
   成功:T类型的指针,指向新分配的内存;
   失败:NULL;
  delete 指针P delete p1;
   释放P所指向的内存,P必须是new操作的返回值;
#c++参数传递
   &:取地址, *:看地址
   引用类型作为参数:给一个对象提供替代的名字
/*--------如下---------------*/
 int i = 5;
 int &j = i;\\相当于直接对同个地址所在的值进行操作,j相当于也指向i的地址
 i = 7;
 cout << i << j ; \\ 会输出i=7,j=7;
/***********************************/
int main(){
    int a, b;
    swap_t(a,b);
    cout << a << b;
}
int swap_t(int& a, int& b) {
    int t;
    t = a;
    a = b;
    b = t;
}

说明

最后修改:2022 年 10 月 22 日
如果觉得我的文章对你有用,请随意赞赏