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

极致cms怎么样兴安盟新百度县seo快速排名

极致cms怎么样,兴安盟新百度县seo快速排名,百度收录情况查询,抖音代运营的好处定义 链表称为线性表的链式存储,顺序表逻辑上相邻的数据,存储位置也相邻。链表逻辑上相邻的数据,存储位置是随机分布在内存的各个位置上的。 故 对于每一个结点,定义的结构体是: typedef struct _LinkNode {int d…

定义

链表称为线性表的链式存储,顺序表逻辑上相邻的数据,存储位置也相邻。链表逻辑上相邻的数据,存储位置是随机分布在内存的各个位置上的。

对于每一个结点,定义的结构体是:

typedef struct _LinkNode 
{int date;				//数据域,存储数据,这里是int类型的数据struct _LinkNode* next; // 指针域,指向了后继元素(下一个结点)的地址
}LinkNode , LinkList;       //两个别名的作用是一模一样的,只是为了区分头结点和结点

 链表的初始化

我们用一个结构体指针L来指向链表,最开始是带一个头结点的空链表,头结点的数据域一般赋值为-1,也可以存储着链表的长度。头结点的指针域指针第一个元素结点,最开始是没有元素结点的空链表(有头结点),如图:

代码实现

bool initLinkList(LinkList*& L) //参数是对结构体指针的引用
{L = new LinkList; //也可以写成 L = new LinkNode ;if (!L){return false; // 申请内存失败,返回了一个空指针}L->next = NULL;return true;
}

链表的插入

头插法

将新结点插到头结点的后面,有两种形式,一是链表为空,二是链表中已有元素结点,如图

你可以分情况,不过也可以不用,例如:

bool insertLinkList(LinkList*& L, LinkNode *node) //node指向要添加的结点
{if (!L || !node) return false;node->next = L->next; //包含两种情况L->next = node;return true;
}

尾插法

尾插,顾名思义就是在最后一个结点插入之后,也分两种情况,一是链表为空,二是链表中已有元素结点,第一种情况的图和头插法的第一种情况的图一样,就是插入方式不同,以下是第二种情况的图:

我们只需要找到 next 指向 NULL 的这个结点就好了

bool LinkListinsert(LinkList*& L, LinkNode *node)
{if (!L || !node) return false;LinkNode* p = NULL;p = L;while (p->next != NULL) //如果是空链表,p == L,所以是包含两种情况{p = p->next;}node->next = p->next;p->next = node;return true;
}

指定位置插入

在第 i 个结点前插入,那么我们就必须有个临时指针指向第 i-1 个结点

bool InsertLink(LinkList*& L, int i, int e) // 这里也可以用之前的LinkNode *node参数,不过可能i不合法
{if (!L) return false;LinkNode* p = L , *s = NULL ;int j = 0;while (p && j < i - 1) // 指向第 i-1 个结点{	p = p->next;j++;}//如果在第0个位置之前插入(i<1) || 如果在最后一个结点+2的位置之前插入(i>n+1,n为链表长度)---都是非法的if (i < 1 || !p) return false;s = new LinkNode;s->date = e;s->next = p->next;p->next = s;return true;
}

遍历链表(打印链表)

bool PrintLinkList(LinkList *& L)
{if(!L) return false; LinkNode* p = L->next; //首先指向第一个结点,如果为空链表就会指向 NULLwhile (p != NULL) // 直到指向最后一个结点的 next 指针(NULL){printf("%d ", p->date);p = p->next;}cout << endl;return true;
}

遍历链表,也可以用来求链表的长度,代码与这个类似。

链表的获取

获取链表第 i 个结点的数据域。

bool GetElemLink(LinkList*& L, int i, int &e) //e返回获取的数据域
{LinkNode* p = L;int j = 0;while ( p!=NULL && j < i){p = p->next;j++;}if (p==NULL || i < 1) //i是非法的:i > n(n为链表长度,例如:获取第n+1个结点的数据域)或者是 i < 1(例如:获取了第0个结点的数据域){return false;}e = p->date;return true;
}

链表的查找

查找我们输入的元素在链表中出现的第一个位置。

bool FindElem(LinkList* L, int e,int &index) // index返回位置
{if (!L || !L->next) return false; //空链表LinkNode* p = L->next; // 现在指向第一个结点int j = 1;  while (p != NULL && p->date != e) {p = p->next;j++;}if (p == NULL)return false;else{index = j;return true;}
}

链表的删除

删除第 i 个结点,i 可能不合法,注意不合法的原因。

bool DeleteLinkNode(LinkList*& L, int i)
{LinkNode* p = NULL , *q = NULL;p = L;int j = 0;while ( p->next!=NULL && j < i - 1){p = p->next;j++;}// 指向第 i-1 个结点if (i < 1 || p->next == NULL) //i非法,删除第0个结点(i<1) 或者是 删除第n+1个结点(i>n,n为链表的长度)return false;else{q = p->next;p->next = q->next ;delete q;return true;}}

链表的销毁(清空)

销毁就是要归还所申请的内存,删除某个结点时,一定要保存下一个结点的地址。简要解释:先保存第一个结点的地址,随后删除头结点(也申请了空间),再保存第二个结点的地址,删除第一个结点,再保存第三个结点……以此类推,可以将全部结点删除。

void DestoryLink(LinkList*& L)
{LinkNode* p = NULL, * q = NULL;p = L;while (p != NULL){	q = p->next;//cout << "删除元素" << p->date << endl;delete p;p = q;}}

总代码

以下是全部代码,链表的函数有不同的实现方法。也许我的代码和别人有些差异,所以可以看看 main 函数中是怎样的。

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;typedef struct _LinkNode
{int date;				//数据域struct _LinkNode* next; // 指针域}LinkNode , LinkList;//初始化链表
bool initLinkList(LinkList*& L)
{L = new LinkList;if (!L){return false;}L->next = NULL;return true;
}//前插法
bool insertLinkList(LinkList*& L, LinkNode *node)
{if (!L || !node) return false;node->next = L->next;L->next = node;return true;
}//尾插法
bool LinkListinsert(LinkList*& L, LinkNode *node)
{if (!L || !node) return false;LinkNode* p = NULL;p = L;while (p->next != NULL){p = p->next;}node->next = p->next;p->next = node;return true;
}//在第i个结点前插入---指定位置插入
bool InsertLink(LinkList*& L, int i, int e)
{if (!L) return false;LinkNode* p = L , *s = NULL ;int j = 0;while (p && j < i - 1){	p = p->next;j++;}//如果在第0个位置之前插入(i<1) || 如果在最后一个结点+2的位置之前插入(i>n+1,n为链表长度)---都是非法的if (i < 1 || !p) return false;s = new LinkNode;s->date = e;s->next = p->next;p->next = s;return true;
}//打印链表
void PrintLinkList(LinkList *& L)
{LinkNode* p = L->next;while (p != NULL){printf("%d ", p->date);p = p->next;}cout << endl;
}//获取第i个结点的数据元素
bool GetElemLink(LinkList*& L, int i, int &e)
{LinkNode* p = L;int j = 0;while ( p!=NULL && j < i){p = p->next;j++;}if (p==NULL || i < 1){return false;}e = p->date;return true;
}//在链表中查找元素,并且用index返回位置
bool FindElem(LinkList* L, int e,int &index)
{if (!L || !L->next) return false;LinkNode* p = L->next;int j = 1;while (p && p->date != e){p = p->next;j++;}if (p == NULL)return false;else{index = j;return true;}
}//删除第i个结点
bool DeleteLinkNode(LinkList*& L, int i)
{LinkNode* p = NULL , *q = NULL;p = L;int j = 0;while ( p->next!=NULL && j < i - 1){p = p->next;j++;}if (i < 1 || p->next == NULL) //删除第0个结点(i<1) 或者是 删除第n+1个结点(i>n,n为链表的长度)return false;else{q = p->next;p->next = q->next ;delete q;return true;}}//清空(销毁)链表
void DestoryLink(LinkList*& L)
{LinkNode* p = NULL, * q = NULL;p = L;while (p != NULL){	q = p->next;//cout << "删除元素" << p->date << endl;delete p;p = q;}}
int main(void)
{LinkList* L = NULL; //指向表头(头结点)的指针LinkNode* e = NULL; //指向结点的指针initLinkList(L);int elem = 0;		//结点的数据元素int i;				//第几个结点int n = 0;			//输入的个数int flag = -1;while (flag != 0){cout << "1.前插链表" << endl<< "2.尾插链表" << endl<< "3.指定位置前插入" << endl<< "4.打印链表" << endl<< "5.获取第i个结点的数据" << endl<< "6.查找元素" << endl<<"7.删除元素"<<endl<< "0.退出(销毁链表)" << endl;cout << "请选择:";cin >> flag;switch (flag){case 1:cout << "请输入前插法插入链表的个数";cin >> n;cout << "请依次输入" << n << "个数:";while (n--){e = new LinkNode;cin >> e->date;insertLinkList(L, e);}break;case 2:cout << "请输入尾插入链表的个数";cin >> n;cout << "请依次输入" << n << "个数:";while (n--){e = new LinkNode;cin >> e->date;LinkListinsert(L, e);}break;case 3:cout << "请输入插入的位置和元素:";cin >> i >> elem;InsertLink(L, i, elem);break;case 4:PrintLinkList(L);break;case 5:cout << "请输入要获取的结点i:";cin >> i;if (GetElemLink(L, i, elem)){cout << "第" << i << "个结点的值为" << elem << endl;}else{cout << "获取元素失败" << endl;}break;case 6:cout << "请输入要查找的元素:";cin >> elem;if (FindElem(L, elem, i)){cout << "找到了,此元素的位置是" << i << endl;}else{cout << "表中无此值" << endl;}break;case 7:cout << "请输入要删除的结点i:";cin >> i;if (DeleteLinkNode(L, i)){cout << "删除成功" << endl;}else{cout << "删除失败" << endl;}break;case 0:DestoryLink(L);break;default:cout << "输入非法! " << endl;break;}}return 0;
}

这里也可以将代码复制,自己调试测试一下,删除某些代码,看看会有什么影响,更能理解。


文章转载自:
http://agami.pfbx.cn
http://transmembrane.pfbx.cn
http://minelayer.pfbx.cn
http://phoenix.pfbx.cn
http://chessboard.pfbx.cn
http://ointment.pfbx.cn
http://precostal.pfbx.cn
http://bluejacket.pfbx.cn
http://autocorrect.pfbx.cn
http://cuscus.pfbx.cn
http://tannier.pfbx.cn
http://cahier.pfbx.cn
http://catamountain.pfbx.cn
http://chitchat.pfbx.cn
http://fjp.pfbx.cn
http://mariana.pfbx.cn
http://earthward.pfbx.cn
http://commonplace.pfbx.cn
http://soapstone.pfbx.cn
http://soubresaut.pfbx.cn
http://jardiniere.pfbx.cn
http://apprentice.pfbx.cn
http://presentive.pfbx.cn
http://antheridium.pfbx.cn
http://woodrow.pfbx.cn
http://oahu.pfbx.cn
http://readily.pfbx.cn
http://hyposulfurous.pfbx.cn
http://biocoenosis.pfbx.cn
http://ladybird.pfbx.cn
http://bow.pfbx.cn
http://patchy.pfbx.cn
http://handelian.pfbx.cn
http://skiogram.pfbx.cn
http://stoneworker.pfbx.cn
http://actiyator.pfbx.cn
http://slime.pfbx.cn
http://notelet.pfbx.cn
http://outriggered.pfbx.cn
http://germinant.pfbx.cn
http://thing.pfbx.cn
http://fabulosity.pfbx.cn
http://gebang.pfbx.cn
http://insurrection.pfbx.cn
http://xenophobe.pfbx.cn
http://incoordination.pfbx.cn
http://swag.pfbx.cn
http://alienage.pfbx.cn
http://agp.pfbx.cn
http://capitulate.pfbx.cn
http://smallmouth.pfbx.cn
http://acetanilid.pfbx.cn
http://tickler.pfbx.cn
http://steroid.pfbx.cn
http://unsought.pfbx.cn
http://qemm.pfbx.cn
http://keratalgia.pfbx.cn
http://regermination.pfbx.cn
http://apollonian.pfbx.cn
http://soberano.pfbx.cn
http://westward.pfbx.cn
http://emulsoid.pfbx.cn
http://bytom.pfbx.cn
http://stew.pfbx.cn
http://argentite.pfbx.cn
http://contravallation.pfbx.cn
http://jaunce.pfbx.cn
http://prague.pfbx.cn
http://erie.pfbx.cn
http://makkoli.pfbx.cn
http://anchovy.pfbx.cn
http://sarcosine.pfbx.cn
http://buttinsky.pfbx.cn
http://kottbus.pfbx.cn
http://invincible.pfbx.cn
http://astronome.pfbx.cn
http://apartness.pfbx.cn
http://encyclopedist.pfbx.cn
http://keratode.pfbx.cn
http://etalon.pfbx.cn
http://asperse.pfbx.cn
http://nighty.pfbx.cn
http://ambulance.pfbx.cn
http://airfield.pfbx.cn
http://esc.pfbx.cn
http://leukocytosis.pfbx.cn
http://postcommunion.pfbx.cn
http://joss.pfbx.cn
http://faq.pfbx.cn
http://theopneust.pfbx.cn
http://medalet.pfbx.cn
http://chiquita.pfbx.cn
http://immensurable.pfbx.cn
http://pyrexia.pfbx.cn
http://slimicide.pfbx.cn
http://papyrotype.pfbx.cn
http://netherlander.pfbx.cn
http://helminth.pfbx.cn
http://csa.pfbx.cn
http://remanufacture.pfbx.cn
http://www.15wanjia.com/news/102873.html

相关文章:

  • 有没有catia做幕墙的网站网络营销的一般流程
  • 哪里可以接一些网站项目做网络游戏推广怎么做
  • 泸州中泸集团建设有限公司网站搜索引擎营销案例
  • 用jsp做的网站需要什么工具关键词排名方案
  • 怎么做王者荣耀网站网络营销的期末试题及答案
  • 建设公司起名哪个网站好平台如何做推广
  • 附近做网站的公司电话泰安网站推广优化
  • 天津做网站得公司百度移动点击排名软件
  • 外贸营销推广公司百度关键词优化大
  • 长沙建立网站百度seo免费推广教程
  • 怎么做相册网站网推平台有哪些比较好
  • 网站怎么做盈利怎么建个人网站
  • 做网站的可行性分析网站推广排名优化
  • 佛山公益网站制作青岛网站建设与设计制作
  • 网站备案查询主办单位性质为个人百度seo培训公司
  • 免费网站建站软件济南今日头条新闻
  • 怎么弄网站免费seo
  • 网站怎么添加广告代码百度推广登录入口官网
  • dephi 网站开发推广普通话
  • 安徽制作网站专业公司自己可以做网站推广吗
  • 深圳网站建设定制免费crm客户管理系统
  • wordpress模版主题上海网络seo公司
  • 电商怎么做需要什么条件游戏优化大师有用吗
  • 什么网站可以找到做餐饮的会计如何网络营销自己的产品
  • 网站开发手机版域名注册管理机构
  • 自己做网站买互联网平台推广
  • 131美女做爰网站拉新项目官方一手平台
  • 齐博网站模板免费公司网站建站
  • 网站优化 seo和sem百度top排行榜
  • 网站源码上传安装快照网站