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

建设网站的市场定位厦门百度公司

建设网站的市场定位,厦门百度公司,制作个人网站的要求,wordpress优酷缩略图目录 循环单链表的插入操作 循环单链表的删除操作 循环单链表的遍历 进阶概念—双向循环链表 循环单链表代码 循环单链表的插入操作 如图,对于插入数据的操作,基本与单链表的插入操作相同,我们可以创建一个独立的结点,通…

目录

循环单链表的插入操作 

循环单链表的删除操作 

循环单链表的遍历 

进阶概念—双向循环链表

循环单链表代码


循环单链表的插入操作 

  如图,对于插入数据的操作,基本与单链表的插入操作相同,我们可以创建一个独立的结点,通过将需要插入的结点的上一个结点的next指针指向该节点,再由需要插入的结点的next指针指向下一个结点的方式完成插入操作。 

其代码可以表示为:

//插入元素
list *insert_list(list *head,int pos,int data){//三个参数分别是链表,位置,参数list *node=initlist();  //新建结点list *p=head;       //p表示新的链表list *t;t=p;node->data=data;if(head!=NULL){for(int i=1;i<pos;i++){t=t->next;  //走到需要插入的位置处}node->next=t->next;t->next=node;return p;}return p;
}

循环单链表的删除操作 

  如图所示,循环单链表的删除操作可以参考单链表的删除操作,其都是找到需要删除的结点,将其前一个结点的next指针直接指向删除结点的下一个结点即可,但需要注意的是尾节点和头结点的特判,尤其是尾结点,因为删除尾节点后,尾节点前一个结点就成了新的尾节点,这个新的尾节点需要指向的是头结点而不是空,其重点可以记录为【当前的前一节点.next=自身结点.next】这样的操作可以省去头尾结点的特判:

其代码可以表示为: 

//删除元素
int delete_list(list *head) {if(head == NULL) {printf("链表为空!\n");return 0;}//建立临时结点存储头结点信息(目的为了找到退出点)//如果不这么建立的化需要使用一个数据进行计数标记,计数达到链表长度时自动退出//循环链表当找到最后一个元素的时候会自动指向头元素,这是我们不想让他发生的list *temp = head;          list *ptr = head->next;int del;printf("请输入你要删除的元素:");scanf("%d",&del);while(ptr != head) {if(ptr->data == del) {if(ptr->next == head) { temp->next = head;free(ptr);return 1;}temp->next = ptr->next;    //核心删除操作代码free(ptr);//printf("元素删除成功!\n");return 1;}temp = temp->next;ptr = ptr->next;}printf("没有找到要删除的元素\n");return 0;
}

循环单链表的遍历 

  与普通的单链表和双向链表的遍历不同,循环链表需要进行结点的特判,找到尾节点的位置,由于尾节点的next指针是指向头结点的,所以不能使用链表本身是否为空(NULL)的方法进行简单的循环判断,我们需要通过判断结点的next指针是否等于头结点的方式进行是否完成循环的判断。

此外还有一种计数的方法,即建立一个计数器count=0,每一次next指针指向下一个结点时计数器加一,当count数字与链表的节点数相同的时候即完成循环,这样做有一个问题,就是获取到链表的节点数同时也需要完成一次遍历才可以达成目标。

其代码可以表示为:

//遍历元素
int display(list *head) {if(head != NULL) {list *p  = head;//遍历头节点到,最后一个数据while(p->next != head ) {printf("%d   ",p->next->data);p = p->next;}printf("\n");   //习惯性换行 ( o=^•ェ•)o ┏━┓//把最后一个节点赋新的节点过去return 1;} else {printf("头结点为空!\n");return 0;}
}

进阶概念—双向循环链表

  循环链表还有一个进阶的概念练习,同双向链表与单链表的关系一样,循环单链表也有一个孪生兄弟——双向循环链表,其设计思路与单链表和双向链表的设计思路一样,就是在原有的双向链表的基础上,将尾部结点和头部结点进行互相连接,这个链表的设计不难,就交给读者自主进行设计。

循环单链表代码

 #include<stdio.h>
#include<stdlib.h>
typedef struct list{int data;struct list *next;
}list;
//data为存储的数据,next指针为指向下一个结点//初始结点
list *initlist(){list *head=(list*)malloc(sizeof(list));if(head==NULL){printf("创建失败,退出程序");exit(0);}else{head->next=NULL;return head;}
}//创建--插入数据
int create_list(list *head){int data;   //插入的数据类型printf("请输入要插入的元素:");scanf("%d",&data);list *node=initlist();node->data=data;//初始化一个新的结点,准备进行链接if(head!=NULL){list *p=head;//找到最后一个数据while(p->next!=head){p=p->next;}p->next=node;node->next=head;return 1;}else{printf("头结点已无元素\n");return 0;}}//插入元素
list *insert_list(list *head,int pos,int data){//三个参数分别是链表,位置,参数list *node=initlist();  //新建结点list *p=head;       //p表示新的链表list *t;t=p;node->data=data;if(head!=NULL){for(int i=1;i<=pos;i++){t=t->next;}node->next=t->next;t->next=node;return p;}return p;
}//删除元素
int delete_list(list *head) {if(head == NULL) {printf("链表为空!\n");return 0;}//建立零时结点存储头结点信息(目的为了找到退出点)//如果不这么建立的化需要使用一个数据进行计数标记,计数达到链表长度时自动退出//循环链表当找到最后一个元素的时候会自动指向头元素,这是我们不想让他发生的list *temp = head;          list *ptr = head->next;int del;printf("请输入你要删除的元素:");scanf("%d",&del);while(ptr != head) {if(ptr->data == del) {if(ptr->next == head) { //循环结束的条件换成ptr->next == headtemp->next = head;free(ptr);return 1;}temp->next = ptr->next;free(ptr);//printf("元素删除成功!\n");return 1;}temp = temp->next;ptr = ptr->next;}printf("没有找到要删除的元素\n");return 0;
}//遍历元素
int display(list *head) {if(head != NULL) {list *p  = head;//遍历头节点到,最后一个数据while(p->next != head ) {printf("%d   ",p->next->data);p = p->next;}printf("\n");   //习惯性换行 ( o=^•ェ•)o ┏━┓//把最后一个节点赋新的节点过去return 1;} else {printf("头结点为空!\n");return 0;}
}int main(){//初始化头结点//list *head=initlist();head->next=head;通过插入元素完善链表/for(int i=0;i<5;i++){   //只是演示使用,不具体提供输入create_list(head);}display(head);插入元素head=insert_list(head,1,10);display(head);删除元素delete_list(head);display(head);return 0;
}

文章转载自:

http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://00000000.rhjhy.cn
http://www.dtcms.com/wzjs/619957.html

相关文章:

  • 定制网站建设简介建网站用哪个好
  • 南阳网站排名公司广州官方发布
  • 自己的网站怎么做模板招聘网站可以同时做两份简历吗
  • 做个网站多少钱 百度能查到的dw网页制作成品代码加图片
  • 一个网站有个前端后端怎么做网站建设如何来选择空间
  • 珠海营销型网站建设公司中国中铁建设集团门户网登录
  • 用c 做网站网站备案org
  • 淘宝网站怎么做适配公司网站建设费用科目
  • 业绩显示屏 东莞网站建设技术支持推广资源网
  • 沈阳网页建站模板中国建设银行官网站e路护航
  • 用asp做网站遇到的问题哪个网站可以做魔方图片大全
  • 品牌网站建设公司哪好找谁做网站比较好
  • 网站技术部门架构外包公司值得去吗
  • 如何建立一个学校网站网络服务器端口怎么查
  • 网站后台asp源码上海网站建设规范
  • 做网站引流的利润宁波市建筑业管理信息网
  • 盐城网站推广百度付费问答平台
  • 天津市建设与管理局网站下载wordpress 怎么打开
  • 用手机域名做网站有多少php婚庆网站源码
  • 灵山县建设局网站做名片用什么网站
  • 做地铁建设的公司网站陕西建筑工程网
  • 什么网站可以找人做软件四库一平台查询系统
  • 做怎样的企业网站推广网站的几种方法
  • 新光途网站建设简约好看的网站模板
  • 无锡教育论坛网站建设wordpress 标签云集
  • 房屋中介做网站的wordpress最多支持多少会员
  • 网站太卡怎么优化制作一个收费网站要多少钱
  • 深圳有做网站最近价格如何把自己做的网站分享给别人用
  • 延吉网站开发公司有哪些蓝希菏泽网站建设
  • 苏州网站建设书生商友建设网站招聘