博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
名单(两)——基本操作单向链表(创、删、印、节点统计数)
阅读量:6594 次
发布时间:2019-06-24

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

1.指针联动
通过两个指针指向前任和后继节点,而移动一个单向链表,当被处理的指针的节点,节点的前体也有一个指针。
2.有一种无序单向链表。和数据字段值不一样。指针pmin最小点值节点,和指针prem最小点值结点的前驱结点:
代码片段:
for(p = head; p; q = p, p = p->next)
{
    if(pmin->data > p->data)
    {
        pmin = p;
        prem = q;
    }
}
3.单向链表的删除算法
注:使用malloc函数分配的结点单元必须使用free函数来释放。free(p)之后,p所指向的单元被释放。p被系统又一次赋值为随机值,p仅仅能在程序执行完毕之后自己主动清除。
头结点的删除:head = head->next;free(pdel);
非头结点的删除:ppre->next = pdel->next;free(pdel);
4.样例
注:单向链表的最主要的操作,新建一个链表、删除一个元素、打印链表、统计链表的个数、删除链表。
#include 
#include
#define NULL 0typedef struct node { int data; struct node *next;}ElemSN;ElemSN * creat_link(int ms); //逆向创建一个链表void print_link(ElemSN *head); //输出单向链表ElemSN * delete_node(ElemSN *head, int x); //删除链表中的一个结点int count_link(ElemSN *head); //统计单向链表结点的个数ElemSN * clear_link(ElemSN *head); //删除链表int main(){ ElemSN *head; int ms, x; printf("Please input node number:"); scanf("%d", &ms); head = creat_link(ms); print_link(head); printf("Please input delete node:"); scanf("%d", &x); head = delete_node(head, x); print_link(head); printf("link member is :%d\n", count_link(head)); head = clear_link(head);}ElemSN * creat_link(int ms){ ElemSN *h = NULL, *p; int i, x; for(i = 0; i < ms; i++) { printf("Please input data:"); scanf("%d", &x); p = (ElemSN *)malloc(sizeof(ElemSN)); p->data = x; p->next = h; h = p; } return h;}void print_link(ElemSN *head){ for(; head; head = head->next) { printf("%d ", head->data); } printf("\n");}ElemSN * delete_node(ElemSN *head, int x){ ElemSN *p = NULL, *q = NULL; if(NULL == head) { return NULL; } for(p = head; p && p->data != x; q = p, p = p->next); //p && p->data != x不能交换位置 if(NULL == p) //没有找到要删除的结点 { return head; } if(NULL == q) //要删除的是头结点 { head = head->next; } else { q->next = p->next; } free(p); return head;}int count_link(ElemSN *head){ int count = 0; for(; head; count++, head = head->next); return count;}ElemSN * clear_link(ElemSN *head){ ElemSN *p; while(head) { p = head->next; free(head); head = p; } return head;}

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
网络编程-第一节
查看>>
基于JAVA的银行卡实名认证接口调用代码实例
查看>>
Centos下安装并设置nginx开机自启动
查看>>
bzoj3195: [Jxoi2012]奇怪的道路
查看>>
C# 使用 CancellationTokenSource 终止线程
查看>>
idea创建springboot工程
查看>>
Web中间件漏洞
查看>>
简单轮播图
查看>>
微信公众号页面无法唤起输入框
查看>>
day 32并行 并发
查看>>
Mac上安装stf
查看>>
介绍几个移动web app开发框架
查看>>
十六进制转十进制(蓝桥杯)
查看>>
搭建Easyui环境在Myeclipse或Eclipse中
查看>>
bin log、redo log、undo log和MVVC
查看>>
ubuntu 重启网络方法--通过杀死进程重启网络
查看>>
深度优先搜索(DFS)(Java)
查看>>
Java --Serializable序列化
查看>>
He angrily answer MBT Tunisha
查看>>
洛谷P2774 方格取数问题(最小割)
查看>>