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

上海公司核名工商官网seo专业技术培训

上海公司核名工商官网,seo专业技术培训,广州 网站建设模板,建网站企划书文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是#xf… 文章目录 1. 双向带头循环链表的结构2. 相关操作2.1 创建节点2.2 尾插2.3 头插2.4 打印2.5 尾删2.6 头删2.7 查找2.8 指定位置前/后插入2.9 删除指定位置的节点2.10 删除指定位置后的节点2.11 销毁链表 3.顺序表与链表区别 1. 双向带头循环链表的结构 与单链表不同的是 双向链表有一个“哨兵位”作为单独的头节点每个节点都可以指向其前驱和后继节点链表是循环的 带头链表里的头节点实际为“哨兵位”哨兵位节点不存储任何有效元素只是站在这里“放哨的” “哨兵位”存在的意义遍历循环链表避免死循环。 typedef int ListDataType; typedef struct List {ListDataType data;struct List* prev;//指向前驱节点struct List* next;//指向后继节点 }List;2. 相关操作 2.1 创建节点 创建的每个节点应该自己成环 List* BuyNode(ListDataType x) {List* newnode (List*)malloc(sizeof(List));if (newnode NULL){perror(malloc);return NULL;}newnode-data x;newnode-next newnode;newnode-prev newnode; }创建哨兵位 int main() {//哨兵位List* head BuyNode(-1);return 0; }2.2 尾插 void ListPushBack(List* phead, ListDataType x) {assert(phead);List* newnode BuyNode(x);newnode-next phead;newnode-prev phead-prev;//尾节点指向新节点phead-prev-next newnode;phead-prev newnode; }2.3 头插 void ListPushFront(List* phead, ListDataType x) {assert(phead);List* newnode BuyNode(x);newnode-next phead-next;newnode-prev phead;phead-next newnode;//只有头节点时就是头节点的prevphead-next-prev newnode; }2.4 打印 由于是循环链表所以循环停止的条件应该是cur ! head void ListPrint(List* phead) {assert(phead);List* cur phead-next;while (cur ! phead){printf(%d-, cur-data);cur cur-next;}printf(NULL\n); }2.5 尾删 不能没有节点尾节点的前驱节点指向头节点头节点指向尾节点的前驱节点释放尾节点 void ListPopBack(List* phead) {assert(phead);//只有头节点assert(phead-next ! phead);List* del phead-prev;del-prev-next phead;phead-prev del-prev;free(del); }2.6 头删 不能没有节点待删除节点的后继节点的prev指向头节点头节点指向待删除节点的后继节点 void ListPopFront(List* phead) {assert(phead);assert(phead-next ! phead);List* del phead-next;del-next-prev phead;phead-next del-next;free(del); }2.7 查找 List* ListFind(List* phead, ListDataType x) {assert(phead);assert(phead-next ! phead);List* cur phead-next;while (cur ! phead){if (cur-data x){return cur;}cur cur-next;}return NULL; }2.8 指定位置前/后插入 将新节点与指定位置相连即可 指定位置前 void ListPosFrontInsert(List* pos, ListDataType x) {assert(pos);List* newnode BuyNode(x);List* prev pos-prev;newnode-prev prev;newnode-next pos;prev-next newnode;pos-prev newnode; }指定位置后 void ListPosBackInsert(List* pos, ListDataType x) {assert(pos);List* newnode BuyNode(x);List* next pos-next;newnode-next next;newnode-prev pos;next-prev newnode;pos-next newnode; }2.9 删除指定位置的节点 将指定位置的前驱节点、后继节点连接即可 void ListPosDel(List* pos) {assert(pos);List* prev pos-prev;List* next pos-next;prev-next next;next-prev prev;free(pos);pos NULL; }2.10 删除指定位置后的节点 若指定位置是尾节点则应该执行头删 void ListPosAfterDel(List* phead, List* pos) {assert(phead);assert(pos);if (pos-next phead){ListPopFront(phead);}else{List* del pos-next;del-next-prev pos;pos-next del-next;free(del);} }2.11 销毁链表 此接口的参数是一级指针所以并不能将哨兵位销毁因此需要再调用处再将哨兵位置为空 void ListDestroy(List* phead) {assert(phead);assert(phead-next ! phead);List* cur phead-next;while (cur ! phead){List* next cur-next;free(cur);cur next;}cur NULL;free(phead);phead NULL; }3.顺序表与链表区别 不同点顺序表链表存储空间上物理上一定连续逻辑上连续物理上不一定连续随机访问O(1)O(N)任意位置插入或删除可能需要搬运元素效率低O(N)只需修改指针指向插入动态顺序表空间不够需要扩容没有容量的概念应用场景元素高效存储频繁访问任意位置频繁插入/删除缓存利用率高低
http://www.tj-hxxt.cn/news/129978.html

相关文章:

  • 网站建设的基本内容wordpress许愿墙
  • 网站怎么快速做排名滨湖区知名做网站选哪家
  • 个人怎么申请专利山东济南网站制作优化
  • 网站哪些页面会做静态化网站定制费用
  • 建立主题网站的顺序一般是wordpress加背景音乐
  • 百度合伙人官方网站红酒手机网站模板
  • 大连哪里有手机自适应网站建设wordpress表格
  • 网站开发需要什么专业市辖区郑州网站建设
  • 网站内容建设 发布形式建筑工程网上报建网站诚信手册
  • 淮北建投网站全球搜索网站排名
  • 网站遭攻击广州网站快速优化排名
  • 网站模板大全 优帮云诚聘高新网站开发工程师
  • 仿网站视频教程衡水注册公司流程和费用
  • 贵港市城乡住房建设厅网站大连网站建设找简维科技
  • 网站建设网页设计用什么软件大连企业网站建设公司
  • 广州云建站模板驻马店百度seo
  • 网站建设厦门网页空间是什么意思
  • 自己做网站免费参考文献网站开发
  • 网站建设工作室+怎么样三亚市城乡建设局网站
  • 新网建站教程网站开发招投标书
  • 网站做短视频业务许可东莞市城建局
  • 网站建设成功案例方案wordpress项目展示设置
  • 潍坊网站制作发网站问卷调查系统怎么做
  • 网页版淘宝登录入口通化网站优化
  • 企业网站一般包括哪些内容网络营销推广方案策划与实施
  • 昆明网站建设天猫运营在线名片制作网站开发
  • 城市建设服务中心网站开发公司移交物业协议书
  • 昆明网站建设精英东莞百度seo哪家好
  • 代刷网站推广链接免费网站注册怎么做屏蔽过滤
  • 我国中小企业网站建设置顶 wordpress