博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单链表的建立/测长/打印/删除/排序/逆序/寻找中间值
阅读量:6994 次
发布时间:2019-06-27

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

#include 
#include
//函数malloc需要的头文件typedef struct student * PNode;typedef struct student //设计链表前最重要的是先想好数据结构{ int data; struct student *next;}Node;PNode create(){ PNode head,p; int x=0; char flag; head=(PNode)malloc(sizeof(Node)); p=head; if(head==NULL) return NULL; printf("请输入节点的值:"); scanf("%d",&x); while(1) { p->data=x; printf("是否继续添加链表:Y/N\n"); scanf(" %c",&flag); //注意,在%c前面有个空格,是为了防止上一个语句的回车符,因为scanf会把回车符当做一个字符,而scanf只接收一个字符 if('N'==flag) break; p->next=(PNode)malloc(sizeof(Node)); //为下一个节点申请地址 p=p->next; printf("请输入节点的值:"); scanf("%d",&x); }   p->next=NULL; return head;}void print(PNode link){ PNode head=link; if(head==NULL) return; while(head!=NULL) { printf("%d ",head->data); head=head->next; } printf("\n");}int length(PNode link){ int count=0; PNode head=link; while(head!=NULL) { ++count; head=head->next; } return count;}PNode del(PNode link,int num) //删除分两种情况,一种是删除第一个节点,另外一种是删除中间节点。{ PNode head,p,temp; head=link; if(head->data==num) //删除第一个节点 { head=head->next; return head; } p=head; while(p->next!=NULL) { if(p->next->data==num) //删除第其他节点 { temp=p->next->next; free(p->next); p->next=temp; return head; } p=p->next; } printf("没有这样的节点"); return link;}PNode sort(PNode link){ PNode head=link; PNode p; int i,j,temp; int n=length(link); for(j=1;j
data>p->next->data) { temp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } } return head;}PNode reverse(PNode link){ if(link==NULL) return NULL; //注意要判断是否为空 PNode head=link; PNode p,p1,p2; //用p1来反指向p,同时p2不改变,利用p2->next来使指针不断向前,如果p2->next=p1也重指向,就不能利用p2继续前进了。 p=head; //利用1 3 5 7 9画图来写算法 p1=p->next; if(p1==NULL) return p; //如果不判断是否为空,那么如果p1为空,那么p2将会出现段错误 p2=p1->next; p->next=NULL; //处理头结点 p1->next=p; while(p2!=NULL) { p=p1; p1=p2; p2=p2->next; p1->next=p; } return p1;}int searchMid(PNode link) //寻找中间值{ PNode mid,fast;//mid每次移动一个结点,fast每次移动两个结点 mid=link; fast=link; if(mid->next==NULL) //假设只有一个结点 return mid->data; while(fast!=NULL) { mid=mid->next; fast=fast->next->next; } return mid->data;}int main(void){ PNode link; int len;//链表长度 int num;//要删除的值 int mid;//链表的中间值 link=create();//创建链表 printf("打印刚创建的链表\n"); print(link); mid=searchMid(link); printf("中间值是%d\n",mid); link=reverse(link); printf("打印反转后的链表\n"); print(link); link=sort(link); printf("排序好的链表\n"); print(link); printf("请输入要删除的链表的值:"); scanf("%d",&num); link=del(link,num); printf("打印删除后链表的值\n"); print(link); len=length(link); printf("链表的长度为%d\n",len); return 0;}

 

转载于:https://www.cnblogs.com/longzhongren/p/4413826.html

你可能感兴趣的文章
javaScript:块级作用域学习笔记
查看>>
时序数据异常检测(2)指数平滑方法
查看>>
AQS同步组件--ReentrantLock与锁
查看>>
Android工程集成flutter
查看>>
人工智慧也能作曲?使用人工智能算法做出来的重金属音乐
查看>>
VUE 执行流程 个人笔记
查看>>
实现简单的正则表达式引擎
查看>>
快速理解JavaScript中call和apply原理
查看>>
JavaScript深入之从原型到原型链
查看>>
HongHu云架构 - maven的构建
查看>>
基于 HTML5 的 WebGL 3D 档案馆可视化管理系统
查看>>
[译] 使用 React 和 ImmutableJS 构建一个拖放布局构建器
查看>>
AFNetworking源码阅读1
查看>>
ENFI下载器地址——百度网盘不限速下载工具
查看>>
栈的应用---后缀表达式
查看>>
吴恩达机器学习系列7:逻辑回归
查看>>
使用Charles搭建反向代理
查看>>
程序员笔记| 详解Eureka 缓存机制
查看>>
在Mac 系统下进行文件的显示和隐藏
查看>>
Item 16 Favor composition over inheritance
查看>>