typedef
1.typedef long byte_4;给已知数据类型long起个新名字,叫byte_4。
2.typedef与结构结合使用,typedef struct tagMyStruct MyStruct;MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。
3.建立结构体时,建立指向结构体本身的指针。
链表
链表初始化
先struct Lnode L = (Lnode *)malloc(sizeof(Struct Lnode))
L->data = 0,L->next = NULL,return L;
单链表打印
while(p->next != NULL) p = p->next;printf(“%d”,p->data);
头插入
先赋值,在将插入节点指向下一节点,在将头节点指向插入节点,顺序不能便。
尾插法
先建立头指针,利用while循环让头指针指向尾节点,然后再新建一个node节点,然后保存新节点data,让新节点next指向NULL,在让尾指向新节点。L->data++ 表示链表长度加1
按位查找
有表长,直接for循环,i是第几位元素,for(int j=0;j<i;j++)p=p->next,最后返回p节点即可
按值查找
一直p=p->next,匹配是否data符合,然后返回,但是注意,这样只会返回第一次相同的值
按位插入
与头插一样,要在i位插入,找到i-1,然后就与头插一样。插入节点的next = p->next,i-1的next = 新节点,L->data++
按位删除
i位是q,i-1是p。让p->next = q->next , 然后free(q)
注销链表
一直删除第一位,然后直到L->data == 0 ,free头节点.
双向链表
prior data next 即有前驱节点。
头插 3部分 (尾插同理)
list->firstNode->left = newNode
newNode->right = list->firstNode
list->firstNode = newNode
按位插入
newNode->right = postNodeleft->right
newNode->left = postNode->left
posNodeleft->left = newNode;
posNode->right = newNode;
栈
top栈顶指针,top = -1 栈空。用数组实现,进栈先top++,在s->data[top] = x;出栈是,先出栈,再top- - ;读栈顶元素是,x=s->data[top - -];
环形缓冲区
先进先出,当一个数据元素被用了之后,其余数据元素不需要移动位置,最适合事先确定最大容量。
基本构成
1.环形缓冲区在内存中的位置,缓冲区的长度,有效数据的起始位置,有效数据的结束位置。2.三种状态,空,满,非空非满。3.用镜像指示位置判断空满,当读位 == 写位时,要么空,要么满,如果写镜像指示位以及转一圈回到起点,及镜像指示位不相等,则为满,反之。读相当于消耗,写相当于添加
2.读取分两种情况
phead 在 ptail前面,而且读取长度要重新返回开头,则要分两段,字符用memcpy复制,phead在ptail后面,且读取长度不超过,则正常读取。
3.写与读类似也分情况
指示拷贝时,是从buffer拷贝到phead 或者ptail