链表的创建、测长、排序、插入、逆序的实现(C语言)
- #include <stdio.h>
- #define END_elem 0
- struct node
- {
- int date;
- struct node * next;
- };
- //链表创建
- node * creat()
- {
- int x;
- node *head,*last,*p;
- head=new node();
- last=head;
- scanf("%d",&x);
- while(x!=END_elem)
- {
- p=new node();
- p->date=x;
- last->next=p;
- last=p;
- scanf("%d",&x);
- }
- head=head->next;
- last->next=NULL;
- return head;
- }
- //单链表测长
- int lenght(node *head)
- {
- int n=0;
- node *p=head;
- while(p!=NULL)
- {
- p=p->next;
- n++;
- }
- return n;
- }
- //链表排序
- node *sort(node *head,int n)
- {
- int temp;
- node *p;
- if(head==NULL||head->next==NULL)
- return head;
- for(int i=0;i<n-1;i++)
- {
- p=head;
- for(int j=0;j<n-1-i;j++)
- {
- if(p->date>p->next->date)
- {
- temp=p->date;
- p->date=p->next->date;
- p->next->date=temp;
- }
- p=p->next;
- }
- }
- return head;
- }
- //链表插入
- node * insert(node *head,int num)
- {
- node *p,*q,*t;
- p=head;
- t=new node();
- t->date=num;
- while(num>p->date&&p->next!=NULL)
- {
- q=p;
- p=p->next;
- }
- if(num<=p->date)
- {
- if(p==head)
- {
- t->next=p;
- head=t;
- }
- else
- {
- t->next=p;
- q->next=t;
- }
- }
- else//把插入点定在表尾
- {
- p->next=t;
- t->next=NULL;
- }
- return head;
- }
- //链表输出
- void print(node *head)
- {
- struct node *p=head;
- while(p!=NULL)
- {
- printf("%d\n",p->date);
- p=p->next;
- }
- }
- //链表删除
- node *del(node *head,int num)
- {
- node *p,*q;
- p=head;
- while(num!=p->date&&p->next!=NULL)
- {
- q=p;
- p=p->next;
- }
- if(p->date==num)
- {
- if(p==head)
- {
- head=p->next;
- delete p;
- }
- else
- {
- q->next=p->next;
- delete p;
- }
- }
- else
- printf("Didn't Fond The Num!");
- return head;
- }
- //链表逆序
- node *reverse(node *head)
- {
- node *p1,*p2,*p3;
- p1=head;
- p2=head->next;
- while(p2)
- {
- p3=p2->next;
- p2->next=p1;
- p1=p2;
- p2=p3;
- }
- head->next=NULL;
- head=p1;
- return head;
- }
- void main()
- {
- struct node *head;
- int n,m;
- printf("链表创建,输入数字:\n");
- head=creat();
- print(head);
- n=lenght(head);
- printf("链表的长度为 %d\n",n);
- printf("链表排序:\n");
- head=sort(head,n);
- print(head);
- printf("输入要插入链表的数:\n");
- scanf("%d",&m);
- printf("插入后的链表:\n");
- head=insert(head,m);
- print(head);
- printf("链表逆序:\n");
- head=reverse(head);
- print(head);
- }
链表的创建、测长、排序、插入、逆序的实现(C语言)的更多相关文章
- 将单链表的每K个节点之间逆序
[说明]: 本文是左程云老师所著的<程序员面试代码指南>第二章中“将单链表的每K个节点之间逆序”这一题目的C++复现. 本文只包含问题描述.C++代码的实现以及简单的思路,不包含解析说明, ...
- 【链表问题】打卡9:将单链表的每K个节点之间逆序
前言 以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获.每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢. 注:如果代码排版出现了问题麻烦通知我下 ...
- 栈和队列----将单链表的每K个节点之间逆序
将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个. 例如: 链表:1—>2—>3 ...
- 左神算法书籍《程序员代码面试指南》——2_11将单链表的每K个节点之间逆序
[题目]给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点.例如:链表:1->2->3->4->5 ...
- [算法] 将单链表的每K个节点之间逆序
题目 给定一个单链表的头结点,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点一组,则不调整最后几个节点. 解答 使用栈结构 import java.util.Stack; pu ...
- 算法总结之 将单链表的每K个节点之间逆序
给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点 思路: 如果k的值小于2,不调整.k<1 没有意义,k==1代 ...
- [程序员代码面试指南]链表问题-将单链表的每k个节点之间逆序
题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转 ...
- 使用OC实现单链表:创建、删除、插入、查询、遍历、反转、合并、判断相交、求成环入口
一.概念 链表和数组都是一种线性结构,数组有序存储的,链表是无序存储的. 数组中的每一个元素地址是递增或者递减的关系,链表的每一个节点的地址没有此规律,它们是通过指针的指向连接起来. 链表种类:单链表 ...
- Linux C++ 单链表添加,删除,输出,逆序操作
/*单链表操作*/#include <iostream>using namespace std; class Node{ public: Node(){ next=0; } Node(in ...
- 链表逆序(JAVA实现)
题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回: 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继: 重复步骤2,直到q为空: 调整链表头和链表尾: 图 ...
随机推荐
- (转)从Membership 到 .NET4.5 之 ASP.NET Identity
引入 - 用户信息是如何存在数据库中的 我们前两篇都只讲到了怎么用Membership注册,登录等,但是我们漏掉了一个很重要并且是基本上每个用Membership的人都想问的,我的用户信息怎么保存?我 ...
- maven-使用assembly自定义打包
用maven管理项目引用依赖很方便,但是打包的时候如果是web包还好,会直接把依赖的jar包打到lib目录中,如果是jar包的话,依赖默认是不打入进去的 这样如果运行环境中没有依赖的jar包,就麻烦了 ...
- UIView的生命周期总结
序言: loadView.viewDidLoad.viewDidAppear.initWithNibName.awakeFromNib等经常出现在UIViewController中的方法介绍. 这些方 ...
- MVC3+Linq to sql 显示数据库中数据表的数据
1:首先创建asp.net mvc3应用程序 2:创建项目完成后 找到controllers文件鼠标右击选择添加控制器 3 为models文件夹添加一个linq to sql类文件,然后把数据库中的数 ...
- 数据结构【二】:简单阻塞队列BlockingQueue
在POSIX多线程[一]:简单队列simple queue的基础上使用内部互斥锁和条件变量来控制并发以达到线程安全的目的,其主要用于 [生产者-消费者] 队列. 1.BlockingQueue初始化时 ...
- mysql的 join联合查询的通俗解释
表a 1 2 3 4 aid adate 1 a1 2 a2 3 a3 表b 1 2 3 4 bid bdate 1 b1 2 b2 4 b4 两个表a.b相连接,要取出id相同的字段. 1 sele ...
- [课程相关]附加题——stack的理解
一.stack的三种解释 stack有三种解释,我个人理解如下. 1.用户自定义的stack 用户自定义的stack就是一般意义上的后进先出队列,从名字上就能理解了,stack由下向上增长,有一个顶指 ...
- js、jquery、动态添加option项
var selid = document.getElementById("sltid"); for(var i=0; i<10;i++){ //循环添加多个值 sid ...
- 【WinAPI】User32.dll注释
#region User32.dll 函数 /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备 ...
- JavaWeb 学习的第一阶段总结
本人从事Asp.net开发三年,结合市场情况,综合考虑后决心转向JavaWeb方向.于是开始了自学Java的历程. 首先,我用马士兵的Java基础教学视频,快速地学习了一遍Java基础.因为有C#基础 ...