typedef链表 双向链表 顺序队列(环形缓冲区)

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

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值