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

企业网站管理系统设计与实现深圳软件系统开发

企业网站管理系统设计与实现,深圳软件系统开发,主机屋 建网站教程,4399影视在线观看免费高清双向循环链表特点 **双向链接#xff1a;**每个节点都包含两个指针#xff0c;一个指向前一个节点#xff08;前驱节点#xff09;#xff0c;另一个指向后一个节点#xff08;后继节点#xff09;。这种双向连接使得在链表中可以轻松地在两个方向上遍历节点。 **循环…双向循环链表特点 **双向链接**每个节点都包含两个指针一个指向前一个节点前驱节点另一个指向后一个节点后继节点。这种双向连接使得在链表中可以轻松地在两个方向上遍历节点。 **循环性质**最后一个节点的后继节点指向第一个节点形成一个环状结构。这意味着可以无限循环遍历链表因为没有真正的末尾。 **灵活性**由于双向链接可以方便地在链表中插入、删除和移动节点而不需要像单链表那样需要迭代查找前一个节点。 **前向和后向遍历**可以从任何节点开始向前或向后遍历整个链表。这对于需要双向遍历的情况非常有用例如在双向队列deque或编辑器中。 **常见应用**双向循环链表常用于实现循环队列、双向队列、LRU最近最少使用缓存算法、文本编辑器的撤销和重做功能等。 哨兵位 数据结构中的哨兵位通常指的是一种特殊的元素或节点它在数据结构中扮演了特殊的角色通常用于简化算法的实现、边界情况的处理或者提高性能。哨兵位并不包含实际的数据其主要作用是占据一个特定的位置以便更容易处理数据结构的边界情况。 C语言代码实现 声明文件 #pragma once #include stdio.h #include assert.h #include stdlib.h #include stdbool.htypedef int LTDataType;typedef struct ListNode {struct ListNode* next;struct ListNode* prev;LTDataType data;}LTNode;LTNode* BuyListNode(LTDataType x); LTNode* ListInit(); //双向链表初始化 void LTPrint(LTNode* phead); //Print void ListPushBack(LTNode* phead, LTDataType x); //尾插 void ListPopBack(LTNode* phead); //尾删void ListPushFront(LTNode* phead, LTDataType x); //头插 void ListPopFront(LTNode* phead); //头删LTNode* LTFind(LTNode* phead, LTDataType x); //查找void LTInsert(LTNode* pos, LTDataType x); //在pos之前插入x void LTErase(LTNode* pos); //删除pos位置的数据bool LTEmpty(LTNode* phead); //判断双向链表是否为空 size_t LTSize(LTNode* phead); //长度 void LTDestroy(LTNode* phead); //销毁链表实现文件 #include List.hLTNode* BuyListNode(LTDataType x) {LTNode* node (LTNode*)malloc(sizeof(LTNode)); if (node NULL) {perror(malloc fail...);return -1;}node-data x;node-next NULL;node-prev NULL;return node; }LTNode* ListInit() {LTNode* phead BuyListNode(-1);phead-next phead; phead-prev phead;return phead; }void LTPrint(LTNode* phead) // Print double-link list {assert(phead); // ensure phead is not empty LTNode* cur phead-next;while (cur ! phead){printf(%d -, cur-data);cur cur-next;}printf(\n);}void ListPushBack(LTNode* phead, LTDataType x) {assert(phead); LTNode* newnode BuyListNode(x);LTNode* tail phead-prev; newnode-next phead; newnode-prev tail;tail-next newnode; phead-prev newnode; }void ListPopBack(LTNode* phead) {assert(phead);assert(phead-next ! phead); LTNode* tail phead-prev;LTNode* tailPrev tail-prev;tailPrev-next phead;phead-prev tailPrev;free(tail); }void ListPushFront(LTNode* phead, LTDataType x) {assert(phead);LTNode* newnode BuyListNode(x);newnode-next phead-next;phead-next-prev newnode;phead-next newnode; newnode-prev phead; }void ListPopFront(LTNode* phead) // head deletion {assert(phead);assert(phead-next ! phead);LTNode* cur phead-next; LTNode* cur_next cur-next;phead-next cur_next;cur_next-prev phead;free(cur); //freeing this node }LTNode* LTFind(LTNode* phead, LTDataType x) //Find the position of data x {assert(phead);LTNode* cur phead-next;while (cur-next ! phead){if (cur-data x) //find{return cur; //return the datas node}cur cur-next; //if not find, pointer pointing to the next node}return; //not find }void LTInsert(LTNode* pos, LTDataType x) //在pos之前插入x {assert(pos);LTNode* newnode BuyListNode(x); //new node that data is xLTNode* prev pos-prev;newnode-prev prev;newnode-next pos;prev-next newnode;pos-prev newnode; }void LTErase(LTNode* pos) //删除pos位置的数据 {assert(pos);LTNode* prev pos-prev;LTNode* next pos-next;free(pos);prev-next next;next-prev prev; }bool LTEmpty(LTNode* phead) //判断双向链表是否为空 {//assert(phead);//if (phead-next phead)//{// return true;//}//else//{// return false;//}return phead-next phead; }size_t LTSize(LTNode* phead) //长度 {assert(phead);size_t counter 0;LTNode* cur phead;while (cur ! phead){counter;cur cur-next;}return counter; }void LTDestroy(LTNode* phead) //销毁链表 {assert(phead);LTNode* cur phead;while (cur ! phead){LTNode* next cur-next;free(cur);cur next;}free(phead);phead NULL; //这里置空不起作用}测试代码 #include List.hvoid ListTest_1() {LTNode* phead ListInit();ListPushBack(phead, 10);ListPushBack(phead, 20);ListPushBack(phead, 30);ListPushBack(phead, 40);LTPrint(phead); //Print double-link listLTNode* pos LTFind(phead,30); //Find the position of data if (pos-data 30){printf(找到了);}else{printf(没找到);}LTInsert(pos, 100);//ListPopBack(phead);//ListPopBack(phead);//ListPopBack(phead);//ListPopFront(phead); //ListPopFront(phead);//ListPopFront(phead);//ListPopFront(phead);LTErase(pos);LTPrint(phead); }int main() {ListTest_1();return 0; }
http://www.sadfv.cn/news/133674/

相关文章:

  • 云南建设人力资源网站wordpress 按钮连接在哪里设置
  • 丹东企业做网站福建建设工程环保备案网站入口
  • 网站建设的服务器建设银行网站-个人业务
  • 建设执业注册中心网站家装修效果图大全
  • 海外购物网站大全域名查ip地址查询
  • 烟台网站建设薇企汇互联见效付款网站1g空间多大
  • 提升网站流量k8s部署wordpress
  • 文成做网站云南省新农村建设网站
  • 桂林学校网站制作建设银行官方网首页
  • 重庆整合营销网站建设高端医疗网站建设
  • 淘宝客网站免费建设网页禁止访问怎么解决
  • 电子商务网站建设教程试卷wordpress调用图像描述
  • mip手机网站模板灵感网站
  • 织梦dedecms5.6 网站搬家详细教程网络运营商电话
  • 济南集团网站建设家电网站策划
  • 石家庄专业模板网站制作价格网络营销网站建设实验总结
  • 免费字体seo专业培训机构杭州
  • 个人博客网站注册wordpress登陆后评论增加注册按钮
  • 好用的手机网站主页网页设计公司建网站网站设计
  • 电子商城网站建设项目规划书电子商务营销策略分析
  • 深圳专业做网站较好的公司ps自学网
  • 韶关建设网站网页设计一般多少钱
  • 陕西建设网网站集群wordpress外链批量保存本地
  • 建站公司见客户没话说客户端下载
  • 高台网站建设cms网站开发框架
  • 网站建设最低要求加盟教育培训哪个好
  • 英文网站开发施工企业财务经理年终总结
  • 兰溪市网站建设公司整合wordpress和discuz
  • 月夜直播视频免费观看简述seo
  • 高端开发网站哪家专业单位邮箱怎么申请163邮箱