博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环链表实现增、删、改、查等功能
阅读量:2391 次
发布时间:2019-05-10

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

循环链表有一个头指针指向头结点,如下图所示:

头结点不保存数据,所以head->next中的节点中保存数据。

代码实现:

#include 
#include
typedef struct node{//节点类型 int data;//保存数据 struct node* next;//指向下一个节点}Node;//typedef struct node Node;#define SIZE sizeof(Node)Node* head = NULL;//head保存头节点地址 结节点//2 创建节点的函数Node* creat_node(int d){/*创建一个节点,这个节点指向头节点*/ Node* pn = malloc(SIZE); pn->data = d; pn->next = head->next; return pn;}//3 使用数组初始化链表void init_list(int* p,int len){ if(len<1) return; int i; Node* ph = NULL; Node* pn = NULL; ph = creat_node(p[0]); //p指向头节点 ph->next = ph;//头节点指向头节点 head->next = ph;//结节点 指向 头节点 for(i=1;i
next = pn; ph = ph->next; }}//4 遍历循环单链表void travel(){ Node* p = head->next; printf("list:"); while(p->next != head->next){ printf("%d ",p->data); p = p->next; } printf("%d\n",p->data);}void show(int n){ Node* p = head->next; printf("list:"); int i; for(i=0;i
data); p = p->next; } printf("\n");}//5 添加一个节点到循环单链表末尾void add(int d){ //1 创建新节点 Node* pn = creat_node(d); //2 找到链表的尾节点 Node* p = head->next; while(p->next != head->next){ p = p->next; } //3 新节点成为尾节点:把新节点链接到链表的尾节点之后 p->next = pn;}//6 插入一个节点成为循环单链表的倒数第2个节点void set(int d){ int count = 0; int i; //1 创建新节点 Node* pn = creat_node(d); //2 找到倒数第2个节点 //2.1 得到链表节点总数 Node* p = head->next; while(p->next != head->next){ count++; p = p->next; } //2.2 p指向倒数第2个节点 p = head->next; for(i=1;i
next; //3 插入到倒数第2个节点之后 //3.1 pn->next = p->next; //3.2 p->next = pn;}//7 找到数据为d的节点并返回其地址Node *travel(Node* p,int d){ while(1){ if(p->data==d) return p; p=p->next; //找过一轮了 if((head->next)->data==p->data && p->data!=d ){ return NULL; } }} //8 删除数据为d的节点Node *travel(Node* p,Node* q,int d){ while(1){ if(q->data==d){ q=p->next; p->next=q->next; free(q); q=NULL; } p=p->next; if((head->next)->data==p->data && p->data!=d ){ return NULL; } }} int main(){ int a[5] = {11,22,33,44,55}; //1 创建头节点 头节点不保存数据 一个结。 //这个结保存头节点地址,尾节点指向头节点。 head = (Node*)malloc(SIZE); head->data = 0; head->next = NULL; init_list(a,5); travel(); set(100); show(10); return 0;}

你可能感兴趣的文章
前端| js动态修改video标签视频不刷新的问题
查看>>
JVM基础二| 深入理解JVM内存对象
查看>>
IDEA| centos Unable to open debugger port(127.0.0.1:60157) socket closed
查看>>
JVM基础三| 深入理解垃圾回收及算法
查看>>
JVM基础四| 深入理解JVM执行子系统
查看>>
代码实现| springboot+mybatis+PageHelper实现Mysql数据分页
查看>>
代码规范| 面向对象六大基本原则
查看>>
IDEA| Error resolving template [index], template might not exist or might not be accessible by any
查看>>
力扣题解| 169. 多数元素
查看>>
力扣题解| 999. 可以被一步捕获的棋子数
查看>>
力扣题解| 225. 用队列实现栈
查看>>
力扣题解| 912. 排序数组
查看>>
力扣题解| 1160. 拼写单词
查看>>
力扣题解| 剑指 Offer 57 - II. 和为s的连续正数序列
查看>>
力扣题解| 66. 加一
查看>>
力扣题解| 67. 二进制求和
查看>>
力扣题解| 69. x 的平方根
查看>>
力扣题解| 70. 爬楼梯
查看>>
力扣题解| 剑指 Offer 64. 求1+2+…+n
查看>>
SQL Server中字符串处理函数
查看>>