数据结构学习笔记总结【】注意量词首先,个,长没有0开始的。
位,数组从0开始的。
个比长多一,位比数多一,个长比位数多一。
个位在前。
个位可扩展1.【1个长0位数】【个-第几个,位-指针】【个在插入时比长多1,比较相等】【*取地址,elemtype *任何类型】【L.elem首地址+L.length-1,&引用回传(L.elem数组名[L.length-1]),没有&就是单纯用到不改变】p是指针也就是地址,p=L.elem+L.length-1中L.elem表示第一个地址,p = &(L.elem[L.length-1]L.elem表示数组名。
注意地址在前,数组和长度length在后并排,但数组从0开始。
注意*是取地址的内容,*q = e;即q的内容被e代替了,但elemtype *表示定义所有的数据结构,ElemType *q = &(L.elem[i-1]);这边要注意数组从0开始,【i++我玩带你,目前就一人玩,等下加1。
++i你和我玩。
你和我一起,在玩。
】【=加1】【 *++p 你和我玩 == ++p ,*p】【for(;;)第2个分号后面的语句是在每次循环结束后执行的,所以没影响】【循环并列先执行第一个,在执行第二个】线性表【GetElem(Lb, i, e); 取lb第i个给e,自己定义的】【Lb_len = ListLength(Lb); 长】【LocateElem(La, e, equal) la取e相同的】【ListInsert(La, ++La_len, e);e插在la第La_len+1个】【LIST_INIT_SIZE*sizeof(ElemType) 内存是 size * LIyyfST_INIT_SIZE 的乘积】【L.length < L.listsize 才能未满,长小于空间长】顺序线性表for (++p; p<=q; ++p) *(p-1) = *p; p为要删除的位置,本来是*p= *(p+1);但注意从后往前移动p+1不能大于q 删除的后一位不能大于最后一位,所以开始p=p+1.后面排序减1【左移后给前后不大于最后一位或者跳q-p次到q位移动q-p次各左移1次】【跳q-p次到q位,左覆盖一次】【 exit(OVERFLOW);存储分配失败】单链表&代表传地址引用,无代表传值引用。
*声明一个指针,指向l的地址。
严的书中,只要l的数据结构有改变,都用的是&,不改变的用的是无。
【LinkList &L传地址引用 LinkList *L声明指针指向地址 LinkList L单纯用】【p,L的类型应该都是自己定义的结构体 Node 是个指针!!!】【L为带头结点的单链表的头指针】【typedef struct{ elemtype *elem; int length;int listsize;}sqlist线性表结构】【typedef struct Lnode{ elemtype date; struct Lnode *next}Lnode.*linklist 单链表结构】【->是结构体中的运算符,表示使用这个结构体中的某个指针变量。
而我们定义的结构体中】【p = L;就是把让自己定义的Node p = 头结点,而p = L->next就是让p =头结点的后一个节点。
】【当p等于某个结点时可以代替它,相当于同步了】【while (p->next && j < i-1) 注意删除要考虑p->next,插入要考虑pp = p->next;++j;}】【用了->符号说明L本身是指针。
不长记性,p和p->next都是指针】【->next------p------>data】【1个长 0指数跳几加几】1.带头节点的链表的插入,首先使用临时变量p等于要插入之前的节点(不管具体的插入位置),之后不管要插入的节点x是插到链表头还是插到链表的其他位置都是如下语句: x->next = p->next;p->next = x;2.不带头结点的链表的插入,若要插到链表的开头则x->next = head->next;head = x;//这里不再是head->next = x若插到链表的其他位置则p = 插入之前的节点x->next = p->next;p->next = x;【pc->next = pa ? pa : pb;if(pa)pc-> next = pa;elsepc-> next = pb; 】【pc->next = pa; pc = pa; pa = pa->next;pc->next = pa;pc = pa;可写成 pc->next=pa; pc=pc->next; 】p->prior->next=p->next的意思就是p所指向链表节点的上一个结构体的成员变量(struct_temp指针变量next)。
这里把它赋值为 p所指向节点的下一个。
也就是直接将p的上一个节点和 p的下一个节点连接起来。
【struct struct_temp{struct_temp *prior; //指向上一个struct_temp结构体变量的指针。
struct_temp *next; //指向下一个struct_temp结构体变量的指针。
};】【p->prior->next = p->next->prior = p把后继节点的前驱指向自己把前驱节点的后继指向自己这就连接好了双向箭头。
】【时间复杂度for(i=1; i<=n;) i=i*2; 一般来说是n次所以是常数让i=i*2出现的次数为f(n)也就是2(第一次赋值从2开始)f(n)次方,<n可以得到f(n)=log2n注意T(n)=O(log2n)】【(n-1)+(n-2)+...+2+1=n(n-1)/2=O(n^2).】数据结构是数据对象与对象中数据元素之间关系的集合。
(×)数据元素数据元素之间关系√算法与程序有区别,算法是解决问题的方法或步骤,而程序是用编程语言描述算法后形成的。
在数据结构中二者不是通用的。
栈的工作模式是“先进后出”的模式队列的操作方式是“先进先出”的模式通常要求同一逻辑结构中的所有数据元素具有相同的特性,不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致13.链表不具备的特点是 A 。
A.可随机访问任一结点 B.插入删除不需要移动元素C.不必事先估计存储空间 D.所需空间与其长度成正比若不带头结点的单链表中,头指针为head,则该链表为空的判定条件是(A.)。
A.head==NULLB.head->next==NULLC.head!=NULLD.head->next==head链表为空的判定条件。
题目中给出的单链表head是不带头结点的单链表,头结点是指在单链表head第一个结点之前附设的一个结点,头结点的数据域可以不存放任何数据信息,而其指针域存放指向第一个结点的指针。
在题目中告诉了我们,第一个结点的指针为head,而整个单链表的存储必须从第一个结点进行,如果链表为空,则说明第一个结点为空,因此链表为空的判定条件是head==NULL。
带头结点的单链表head为空的判定条件是 bA.head==NULLB.head->next==NULLC.head!=NULLD.head->next==head若某链表最常用的操作是在最后一个结点之后插入一个结点或者删除最后一个结点,则采用()存储方法最节省问题出现在查找效率上链表最常用的操作是在末尾插入节点和删除尾节点在尾巴插入删除操作:都需要知道他的前导而单链表要查找到最有一个元素需要遍历全部链表双链表直接可以查到前导最常用的操作实在最后一个元素之后插入一个元素和删除第一个元素删除头结点需要头指针或者只用一个-next域就能查到速度就快了p->next=head;就是把 head 所指的结点,链接到 p 所指的结点的后面(即 p 的“下一个”,指向 head)。
如果p 所指的结点正好是head 这个链表的尾结点时,通过这个语句,就把一个单向链表链接成了一个循环单链表。
p指针head指针是在外面的,并不一定放在指针域因为单链表保存的信息只有表头如果要在特定位置插入一个节点需要先从表头一路找到那个节点这个过程是O(n)的在一个长度为 n 的单链表上,设有头和尾两个指针,执行()操作与链表的长度无关。
A、删除单链表中的第一个元素有尾指针B、删除单链表中最后一个元素要倒二指针C、在单链表第一个元素前插入一个新元素尾指针D、在单链表最后一个元素后插入一个新元素有尾指针n个结点的线性表的数组实现,应指的是顺序表吧,不是静态链表顺序存储结构的优点存储密度大线性表采用顺序存储,必须占用一片连续的存储单元线性表采用链式存储,不必占用一片连续的存储单元线性表采用链式存储,便于进行插入和删除操作。
pc->next=pa?pa:pbif(pa)pc->next = pa;elsepc->next = pb;栈和队列的共同点只允许在端点处插入和删除元素一个栈的入栈序列为A B C D E 则不可能的输出序列为给解释下原因我要是明白了晕忘了给选项了抱歉1.EDCBA 2.DECBA 3.DCEAB 4.ABCDE堆栈讲究先进后出,后进先出选项1是abcde先入栈,然后依次出栈,正好是edcba选项2是abcd先依次入栈,然后d出栈,e再入栈,e出栈选项3是错误的,不可能a先出栈选项4是a入栈,然后a出栈;b再入栈,b出栈.依此类推顺序栈st(最多元素为MaxSize)为空的条件是什么当两个指针相等时,栈为空!第一个指针是指向栈的首个元素,而第二个指针是指向最后一个元素的下一个位置,所以当两个指针相等时,栈就是空的了!-> 为指向那个是指针对指向变量的操作符号,这里指针指向了结构体,而结构体内部有数据成员top,那么这个指向该结构体的指针要访问它的成员就要用->符号。
!==为不等于ST->to=0为空ST->top==m0为满ST.TOP是指原定义的变量类型,ST->TOP是指针类型的变量,指向TOP变量的首地址。
在输入、输出函数中应用不同如PRINTF("%D\N",&ST.TOP)PRINTF("%D\N",ST->TOP),不需要&号top就是栈顶指针,栈是一个只针对栈顶元素操作的数据结构,也就是说所有的操作的改变只是栈顶指针,出栈top--,入栈top++,获取栈顶元素data[top]st是参数传过来的结构体(栈),结构体中有表示该栈数据数量也就是a数组中最大的索引的t op,这句话的意思是当top等于最大可容长度度maxsize的时候,表示数组a已满,即该栈已满,否则数组a增加一个元素x,栈顶指示下标加1判定一个顺序栈st(最多元素为MaxSize)为满的条件是 D栈底是ST->top==0, 低于底就是空。