博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++版数据结构之链表<二>
阅读量:5764 次
发布时间:2019-06-18

本文共 2251 字,大约阅读时间需要 7 分钟。

本文就循环链表做一些讨论:

循环链表:

     概念:所谓循环链表,就是在单链表的基础上,把链表最后一个结点的链表指针指向链表的头结点的地址,就构成了一个循环链表。

     关键算法:

先对三个指针作下声明:

head:用来指向链表的头部。链表需要一个指针来标识,这就是头指针。

p1:用来指向新结点,以及用来遍历链表的每一个结点。

p2:用来指向当前结点。

(1)循环链表创建算法

创建一个结点数目为n的循环链表:

#include 
typedef struct node { int num; struct node *next; }stud; stud* Create(int n) { stud *head,*p1,*p2; head=p1=p2=NULL; for(int i=0;i
num=i; if(i==0) { head=p1; } else { p1=p->next; } p2=p1; } p2->next=head; return head; }

 

(2)循环链表查找算法

在头指针为head的循环链表中查找i:

typedef struct node {     int num;     struct node *next; }stud; stud* Find(stud *head,int i) {     stud *p1;     p1=head; while(p1->next!=head)     {         if(i==p1->num)         {             break;         }         else         {             p1=p1->next;         }     }     return p1; }

 

(3)循环链表删除算法

在头指针为head的循环链表中删除i:

typedef struct node {     int num;     struct node *next; }stud; bool Delete(stud *head,int i) {     bool flag=false; if(head)     {         stud *p1,*p2;         while(p1->num!=i && p1->next!=head)         {             p2=p1->next;             p1=p1->next;         }         if(p1->num==i)         {             if(p1==head)             {                 head=head->next;             }             else             {                 p2->next=p1->next;             }             free(p1);  //释放已经脱离链表的结点内存            flag=true;         }     }     return flag; }

 

(4)循环链表插入算法

在头指针为head的循环链表中插入结点p:(假设这是一个由小到大排序的有序链表)

stud* Insert(stud *head,stud *p) {     stud *p1,p2;     p1=head; if(!head)     {         head=p;         p->next=head;     }     else     {         while(p->num > p1->num && p1->next!=head)         {             p2=p1;             p1=p1->next;                     }         if(p->num < p1->num)         {             if(head==p1)             {                 head=p;             }             else             {                 p2->next=p;                 p->next=p1;             }         }         else      //插入末尾         {             p1->next=p;             p->next=head;         }     }     return head; }

 

 

 

诗意般生活 活出生命的精彩

转载于:https://www.cnblogs.com/ly0311/archive/2012/09/16/2687862.html

你可能感兴趣的文章
lyui 列表 上传
查看>>
Juqery ready的几种写法
查看>>
Java编程思想(第4版)读书笔记——02
查看>>
软件工程第四次作业
查看>>
[软考]之进程调度 ...
查看>>
HTTP与HTTPS的区别
查看>>
带参数的函数装饰器
查看>>
家庭作业补充
查看>>
HTML之禁止输入文本
查看>>
mysql报错问题解决MySQL server PID file could not be found!
查看>>
孕三十六周第五天
查看>>
【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
查看>>
P2158 [SDOI2008]仪仗队
查看>>
P1313 计算系数
查看>>
前端性能优化(七)
查看>>
C#程序访问PostgreSQL数据库
查看>>
Sql Jions 的简易理解
查看>>
WML处理---H_wml.php
查看>>
WSS开发,搜索(SPQuery)时出现Invalid column name c2错误 (转载)
查看>>
JAVA位运算
查看>>