当前位置: 首页 > news >正文

0.0 编码基础模板

链表模板

truct ListNode {int val;struct ListNode *next;
};
typedef struct MyLinkedList_t {int val;struct MyLinkedList_t *next;
} MyLinkedList;
void myLinkedListAddAtIndex(MyLinkedList *obj, int index, int val);
MyLinkedList *myLinkedListCreate()
{// 在链表的第一个结点之前会额外增设一个结点,头结点MyLinkedList *dummyHead = (MyLinkedList *)malloc(sizeof(MyLinkedList));if (dummyHead == NULL) {return NULL;}dummyHead->next = NULL;dummyHead->val = 0; // 头结点的val用来指示链表长度return dummyHead;
}
// 从头节点开始遍历,找到index对应的值并返回
int myLinkedListGet(MyLinkedList *obj, int index)
{int cnt = 0;MyLinkedList *tmp = obj->next;while (tmp != NULL) {if (index == cnt) {return tmp->val;}tmp = tmp->next;cnt++;}return -1;
}
void myLinkedListAddAtHead(MyLinkedList *obj, int val)
{myLinkedListAddAtIndex(obj, 0, val);
}
void myLinkedListAddAtTail(MyLinkedList *obj, int val)
{myLinkedListAddAtIndex(obj, obj->val, val);
}
// 插入节点
void myLinkedListAddAtIndex(MyLinkedList *obj, int index, int val)
{int cnt = 0;if (index > obj->val) {// 1.索引大于长度return;}// 2.索引插入节点MyLinkedList *tmp = obj;MyLinkedList *newNode = (MyLinkedList *)malloc(sizeof(MyLinkedList));newNode->val = val;while (tmp != NULL) {if (cnt == index) {break;}tmp = tmp->next;cnt++;}newNode->next = tmp->next;tmp->next = newNode;obj->val++; // 记录链表长度return;
}
// 删除节点
void myLinkedListDeleteAtIndex(MyLinkedList *obj, int index)
{MyLinkedList *node = NULL;MyLinkedList *tmp = obj;int cnt = 0;if (index >= obj->val) {return; // 下标无效}while (tmp != NULL) {if (cnt == index) {break;}cnt++;tmp = tmp->next;}if (tmp->next == NULL) { // 删除的是最后的NULL,直接返回,手法return;}obj->val--;node = tmp->next; // tmp->next为要删除的节点,tmp->next = tmp->next->nexttmp->next = node->next; // 这么操作是因为free(node)free(node);
}
void myLinkedListFree(MyLinkedList *obj) {MyLinkedList *tmp = obj;MyLinkedList *freeNode;while (tmp != NULL) {  // 释放头结点->首元结点内的freeNode = tmp;tmp = tmp->next;freeNode->next = NULL;freeNode->val = 0;free(freeNode);}
}
int main()
{int ret = 0;MyLinkedList* obj = myLinkedListCreate();myLinkedListAddAtHead(obj, 1);myLinkedListAddAtTail(obj, 3);myLinkedListAddAtIndex(obj, 1, 2);ret = myLinkedListGet(obj, 1);myLinkedListDeleteAtIndex(obj, 1);ret = myLinkedListGet(obj, 1);ret = myLinkedListGet(obj, 3);myLinkedListDeleteAtIndex(obj, 3);myLinkedListDeleteAtIndex(obj, 3);ret = myLinkedListGet(obj, 0);myLinkedListDeleteAtIndex(obj, 0);ret = myLinkedListGet(obj, 0);return 0;
}

队列实现模板

#define MAX_NUN     1024
typedef struct {int head;int tail;int size; // 计算队列元素个数int data[MAX_NUN];
} Queue_t;
Queue_t *QueueCreate(int size)
{Queue_t *queue = (Queue_t *)malloc(sizeof(Queue_t));queue->tail = 0;queue->head = 0;queue->size = size;memset(queue->data, 0, sizeof(int) * (MAX_NUN));return queue;
}
bool QueuePush(Queue_t *queue, int value)
{if (QueueIsFull(queue)) {return false;}queue->data[queue->tail] = value;  // 先入队queue->tail = (queue->tail + 1) % queue->size; // tail再移动,队尾元素为tail-1.return true;
}
bool QueuePop(Queue_t *queue, int *value)
{if (QueueIsEmpty(queue)) {return false;}*value = queue->data[queue->head];queue->head = (queue->head + 1) % queue->size;return true;
}
bool QueueIsEmpty(Queue_t *queue)
{return (queue->head == queue->tail);
}
bool QueueIsFull(Queue_t *queue)
{return (((queue->tail + 1) % queue->size) == queue->head);
}
int QueueFront(Queue_t *queue)
{if (QueueIsEmpty(queue)) {return -1;}return queue->data[queue->head];
}
int QueueTail(Queue_t *queue)
{if (QueueIsEmpty(queue)) {return -1;}return queue->data[(queue->tail - 1 + queue->size) % queue->size];
}
void QueueFree(Queue_t *queue)
{free(queue);queue = NULL;
}
http://www.dtcms.com/a/434970.html

相关文章:

  • 用哈希表封装unordered_set和unordered_map
  • 有做面食的网站吗企业网络营销策划案
  • 中山做网站长沙营销企业网站建设
  • 江苏模板网站建设h5微场景制作软件
  • VSCode C/C++ 构建任务配置文件 `tasks.json` 全字段深度解析
  • 动力学系统辨识与建模
  • 做微商网站设计成都网站建设冠辰
  • 【1.SpringAI】3.SpringAI 聊天模型的介绍
  • 多模态大语言模型LISA++
  • 数据合规法律体系的宏观框架与实践要点
  • AoT - Attack on Things:A security analysis of IoT firmware updates论文梳理分析
  • 电子商务网站建设基本组成专门做推广的网站吗
  • 抄底券网站怎么做的网络平台建设怎么做
  • 给我一个免费网站吗昆明小程序开发
  • 网站建设需要哪些人员iis发布asp网站
  • 网络安全等级保护测评实施过程
  • SpringBoot + RabbitMQ 消息队列案例
  • PLC_博图系列☞基本指令”S_CU:分配参数并加计数”
  • k8s-pod调度
  • 中国工商做年报网站石家庄seo网站优化公司
  • 帝国CMS作文网题目文学文章wap+pc自适应响应式模板PHP网站源码
  • 邢台移动网站建设费用wordpress获取用户id
  • 网站设计的技能上海哪家做网站关键词排名
  • 酒店网站建设报价详情wordpress %1$s
  • 网站做支付要多少钱做产品代理上哪个网站好
  • RHEL安装
  • 列出网站开发建设的步骤通过网站建设提高企业的
  • leetcode 77 组合
  • 推广系统建站高清视频素材下载网站
  • freertos教程