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

新品发布会策划流程win7优化极致性能

新品发布会策划流程,win7优化极致性能,设计师配色网站,什么叫网络营销目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是…

目录

 单向链表的概念及结构

 尾插

头插

尾删

​编辑

 头删

 查找

 在pos位置前插

 在pos位置后插

 删除pos位置

 删除pos的后一个位置

总结

代码 


 单向链表的概念及结构

概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的指针链接 次序实现的。

 单向链表的结构:

注意:

  1. 从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续。
  2. 现实中的结点一般都是从堆上申请出来的。
  3. 从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续。 
  •  无头单向非循环链表:结构简单, 一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。

 尾插

尾插分为两种情况:

  1. 一开始没有链表:当开始没有链表,直接将newnode赋给*pphead,通过二级指针改变plist。
  2. 一开始有链表:当开始有链表,创建一个结构体指针tail,来找到最后一个节点,再将newnode赋给最后一个节点的next。

头插

头插分为两种情况,开始有链表和开始没有链表,但是两种情况不需要分类考虑,先将*pphead即plist赋给newnode->next,再将newnode连上*pphead。

尾删

 尾删分两种情况考虑:

  1. 只有一个节点:给*pphead赋空值
  2. 一个以上节点:确定尾节点tail后,通过tail的前一个节点tailprev,进行tailprev->next=NULL赋空值或者直接通过tail->next->next找倒数第二个节点,再给tail->next赋空值。

 头删

 头删不需要分情况,直接将第一个节点的next即第二个节点的地址通过newnode的中转赋给*pphead。

 查找

创建一个结构体指针cur,链表中遍历查找cur->data==x的节点,找到后返回cur,方便后面的修改功能。

 (不需要修改,所以传入函数的是一级指针)

 在pos位置前插

 分两种情况考虑:

  1. 当pos为第一个节点,相当于头插,调用头插函数即可。
  2. 当pos不为第一个节点,通过pos的前一个节点prev,将newnode插入pos前面。 

​​​​​​

 在pos位置后插

在pos位置后插,先将pos->next赋给newnode->next,把newnode和d3连上,再将newnode赋给pos->next,连上d2。

注意:在两个语句不能换位置,不然成环,循环打印

 删除pos位置

 分两种情况:

  1. pos在第一个节点位置,直接调用头删函数即可。
  2. pos不在第一个节点位置,通过pos的前一个节点prev,将pos->next赋给prev->next,达到将pos节点删除的效果。

 

 删除pos的后一个位置

删除pos的后一个位置,需要先检测pos->next是否为空值,为空值就直接返回,若pos->next不为空赋给posNext,再将posNext->next赋给pos->next达到删除posNext节点,后面可以free(posNext)释放posNext节点,再posNext=NULL给它赋空值。

 

无头删除pos位置

 不给头节点的情况下,可以先通过pos->data=posNext->data的方式交换内容,再删除pos的下一节点posNext,将pos替换为posNext,达到和删除pos一样的效果。

但是这种方法的缺点是当pos本身为尾节点时,不能通过下一节点posNext来使用替换法。

 

代码

总结

 在上面众多单向链表的实现中,很多并不实用,当需要大量的头插头删时,使用单向链表会更高效。

代码 

 SList.h

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>typedef int SLTDataType;
typedef struct SListNode
{SLTDataType data;struct SListNode* next;
}SLTNode;//typedef struct SListNode SLTNode;//打印
void SLTPrint(SLTNode* phead);SLTNode* BuySListNode(SLTDataType x);//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x);//尾删
void SLTPopBack(SLTNode** pphead);//头插
void SLTPushBack(SLTNode** pphead, SLTDataType);//头删
void SLTPopFront(SLTNode** pphead);//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);//在pos位置前插
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);//在pos位置后插
void SLTInsertAfter(SLTNode* pos, SLTDataType x);//删除pos位置
void SLTErase(SLTNode** pphead, SLTNode* pos);//删除pos的后一个位置
void SLTEraseAfter(SLTNode* pos);

SList.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"//打印
void SLTPrint(SLTNode* phead)
{SLTNode* cur = phead;//while (cur != NULL)while (cur){printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");
}SLTNode* BuySListNode(SLTDataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;return newnode;}尾插  phead是plist的形参   //开始就有链表
//void SLTPushBack(SLTNode* phead, SLTDataType x)
//{
//	SLTNode* newnode = BuySListNode(x);
//	SLTNode* tail = phead;
//	while (tail->next != NULL)
//	{
//		tail = tail->next;
//	}
//	tail->next = newnode;
//}//尾插  //包括一开始没有链表
void SLTPushBack(SLTNode** pphead, SLTDataType x)
{SLTNode* newnode = BuySListNode(x);if (*pphead == NULL){//改变结构体的指针,所以要用二级指针*pphead = newnode;}else{SLTNode* tail = *pphead;while (tail->next != NULL){tail = tail->next;}//改变的结构体,用结构体的指针即可tail->next = newnode;}
}//头插
void SLTPushFront(SLTNode** pphead, SLTDataType x)
{SLTNode* newnode = BuySListNode(x);newnode->next = *pphead;*pphead = newnode;
}//尾删
void SLTPopBack(SLTNode** pphead)
{//1.空assert(*pphead);//2、一个节点//3、一个以上节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else{//方法1.SLTNode* tailPrev = NULL;SLTNode* tail = *pphead;while (tail->next){tailPrev = tail;tail = tail->next;}free(tail);tailPrev->next = NULL;方法2.//SLTNode* tail = *pphead;//while (tail->next->next)//{//	tail = tail->next;//}//free(tail->next);//tail->next = NULL;}}//头删
void SLTPopFront(SLTNode** pphead)
{//空assert(*pphead);//非空SLTNode* newhead = (*pphead)->next;free(*pphead);*pphead = newhead;
}//查找是否有x这个数,找到返回指向该数的指针
SLTNode* SLTFind(SLTNode* phead, SLTDataType x)
{SLTNode* cur = phead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}//在pos位置前插
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{assert(pos);if (pos == *pphead){SLTPushFront(pphead, x);}else{SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}SLTNode* newnode = BuySListNode(x);prev->next = newnode;newnode->next = pos;}
}//在pos位置后插
void SLTInsertAfter(SLTNode* pos, SLTDataType x)
{assert(pos);SLTNode* newnode = BuySListNode(x);//下面两句不能交换位置,否则会成环newnode->next = pos->next;pos->next = newnode;
}//删除pos位置
void SLTErase(SLTNode** pphead, SLTNode* pos)
{assert(pos);if (*pphead == pos){SLTPopFront(pphead);}//else if (pos->next == NULL)//{//	SLTPopBack(pphead);//}else{SLTNode* prev = *pphead;while (prev->next != pos){prev = prev->next;}		//free(prev->next);//不要free,不然这个节点后面全没了prev->next = pos->next;		}
}//删除pos后一个位置
void SLTEraseAfter(SLTNode* pos)
{//assert(pos);//检测pos是否是尾节点//assert(pos->next);//暴力检测if (pos->next == NULL)//温和检测{return NULL;}SLTNode* posNext = pos->next;pos->next = posNext->next;free(posNext);posNext = NULL;}

 Test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"SList.h"void TestSList1()
{int n;printf("请输入链表的长度:");scanf("%d", &n);printf("\n请依次输入每个节点的值:");SLTNode* plist = NULL;for (size_t i = 0; i < n; i++){int val;scanf("%d", &val);SLTNode* newnode = BuySListNode(val);//头插newnode->next = plist;plist = newnode;}SLTPrint(plist);SLTPushBack(&plist, 1000);SLTPrint(plist);}void TestSList2()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);
}void TestSList3()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);头插//SLTPushFront(&plist, 10);//SLTPushFront(&plist, 20);//SLTPushFront(&plist, 30);//SLTPushFront(&plist, 40);//SLTPrint(plist);//尾删SLTPopBack(&plist);//SLTPopBack(&plist);//SLTPopBack(&plist);//SLTPopBack(&plist);//SLTPopBack(&plist);SLTPrint(plist);}void TestSList4()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//头删SLTPopFront(&plist);SLTPrint(plist);
}void TestSList5()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//查找SLTNode* pos = SLTFind(plist, 40);if (pos){pos->data *= 10;}SLTPrint(plist);
}void TestSList6()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//在pos位置前插int x;scanf("%d", &x);SLTNode* pos = SLTFind(plist, x);if (pos){SLTInsert(&plist, pos, x * 10);}SLTPrint(plist);
}void TestSList7()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//在pos位置后插int x;scanf("%d", &x);SLTNode* pos = SLTFind(plist, x);if (pos){SLTInsertAfter(pos, x * 10);}SLTPrint(plist);
}void TestSList8()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//删除pos位置int x;scanf("%d", &x);SLTNode* pos = SLTFind(plist, x);if (pos){SLTErase(&plist, pos);pos = NULL;}SLTPrint(plist);
}void TestSList9()
{SLTNode* plist = NULL;//尾插SLTPushBack(&plist, 1);SLTPushBack(&plist, 2);SLTPushBack(&plist, 3);SLTPushBack(&plist, 4);SLTPushBack(&plist, 5);SLTPrint(plist);//头插SLTPushFront(&plist, 10);SLTPushFront(&plist, 20);SLTPushFront(&plist, 30);SLTPushFront(&plist, 40);SLTPrint(plist);//删除pos后一个位置int x;scanf("%d", &x);SLTNode* pos = SLTFind(plist, x);if (pos){SLTEraseAfter(pos);pos = NULL;}SLTPrint(plist);
}void PrintSList(SLTNode* phead)
{SLTNode* cur = phead;while (cur != NULL){printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");
}int main()
{//TestSList1();// 头插 尾插//TestSList2();// 尾删//TestSList3();// 头删//TestSList4();// 查找//TestSList5();// pos位置前插//TestSList7();// pos位置后插//TestSList8();// 删除pos位置TestSList9();//删除pos的后一个位置//TestSList10();return 0;
}


文章转载自:
http://intellectronics.kryr.cn
http://kerfuffle.kryr.cn
http://movieola.kryr.cn
http://guerrilla.kryr.cn
http://woolskin.kryr.cn
http://erica.kryr.cn
http://acetate.kryr.cn
http://huskily.kryr.cn
http://innoxious.kryr.cn
http://extensile.kryr.cn
http://sweetmeat.kryr.cn
http://apprize.kryr.cn
http://splanchnic.kryr.cn
http://sarangi.kryr.cn
http://confirmed.kryr.cn
http://parton.kryr.cn
http://leadwort.kryr.cn
http://myotomy.kryr.cn
http://weazand.kryr.cn
http://forehead.kryr.cn
http://petaline.kryr.cn
http://strategics.kryr.cn
http://nystagmus.kryr.cn
http://grouse.kryr.cn
http://gating.kryr.cn
http://evillooking.kryr.cn
http://sulfonyl.kryr.cn
http://refocillate.kryr.cn
http://herniary.kryr.cn
http://udaller.kryr.cn
http://autogenesis.kryr.cn
http://mitchell.kryr.cn
http://tenability.kryr.cn
http://hypophyllous.kryr.cn
http://bernard.kryr.cn
http://outfield.kryr.cn
http://arachnid.kryr.cn
http://sciurid.kryr.cn
http://anyways.kryr.cn
http://spreadable.kryr.cn
http://yaounde.kryr.cn
http://xenocryst.kryr.cn
http://septicopyaemia.kryr.cn
http://mastication.kryr.cn
http://discomfiture.kryr.cn
http://profundity.kryr.cn
http://daresay.kryr.cn
http://sainfoin.kryr.cn
http://supranational.kryr.cn
http://maracay.kryr.cn
http://criticises.kryr.cn
http://mercurian.kryr.cn
http://gabber.kryr.cn
http://lingulate.kryr.cn
http://crossbusing.kryr.cn
http://liveliness.kryr.cn
http://cowtail.kryr.cn
http://currawong.kryr.cn
http://antinuke.kryr.cn
http://bht.kryr.cn
http://gastrologer.kryr.cn
http://sanctimony.kryr.cn
http://oneirocritic.kryr.cn
http://bewitch.kryr.cn
http://protasis.kryr.cn
http://mudguard.kryr.cn
http://bigeminy.kryr.cn
http://zingiber.kryr.cn
http://nasopharyngeal.kryr.cn
http://subgum.kryr.cn
http://mitigator.kryr.cn
http://expiration.kryr.cn
http://launfal.kryr.cn
http://rehear.kryr.cn
http://unappalled.kryr.cn
http://murther.kryr.cn
http://symphonette.kryr.cn
http://furthest.kryr.cn
http://narwal.kryr.cn
http://hypanthial.kryr.cn
http://toxicologically.kryr.cn
http://poker.kryr.cn
http://quizmaster.kryr.cn
http://poilu.kryr.cn
http://raisonneur.kryr.cn
http://fraud.kryr.cn
http://lethargize.kryr.cn
http://dexiocardia.kryr.cn
http://nonlinear.kryr.cn
http://monkey.kryr.cn
http://urgency.kryr.cn
http://world.kryr.cn
http://mullion.kryr.cn
http://daphne.kryr.cn
http://saprobial.kryr.cn
http://apertured.kryr.cn
http://lozengy.kryr.cn
http://tinty.kryr.cn
http://june.kryr.cn
http://departmental.kryr.cn
http://www.15wanjia.com/news/64566.html

相关文章:

  • 建自己的网站用多少钱网页优化方案
  • 河北建设厅网站seo怎么做关键词排名
  • 怎么做网站 高中信息技术网页设计制作网站模板图片
  • 大学网站建设评比考核办法游戏特效培训机构排名
  • 网站风格变化黑帽seo
  • 可以做任务的网站有哪些内容建网站需要多少钱和什么条件
  • 有没有公司直招的网站免费的网站推广平台
  • 推荐一个可以做ppt的网站优化内容
  • 做网站需要多少带宽网络平台推广是干什么
  • 网页设计与制作课程设计报告shu百度seo优化服务项目
  • 张小泉网站策划书海外网络专线
  • 下载网站后怎么做手游推广平台代理
  • 青岛平度疫情seo排名软件价格
  • 做汽车网站开题报告的意义如何查询百度收录情况
  • 信融科技做网站推广可靠吗广州网站优化服务
  • 西安免费做网站公司市场营销方案范文5篇
  • 做网站用dw的多吗营销到底是干嘛的
  • 仿制手机网站教程百度app 浏览器
  • 个人网站怎么做游戏免费推广产品平台有哪些
  • 服务器做视频网站商品促销活动策划方案
  • 新乡网站建设服务中国目前最好的搜索引擎
  • 官方网站想反应问题不弄应该怎么做百度指数数据来源
  • 国土资源集约化网站群建设通知seo怎么收费
  • 视频网站如何做引流seo销售
  • 网站策划建设上海seo优化
  • 撩人的网站怎么做游戏推广平台代理
  • 医院网站建设技术方案赚钱软件
  • wordpress学习 知乎seo整站优化吧
  • idea网站开发教程网络推广好做吗?
  • 武汉h5网站建设推广平台的方式有哪些