单链表(程序员宝典)

//

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <conio.h>

typedef struct student
{
    int data;
    struct student *next;
}node;

//建立单链表
node* create()
{
    node *head,*p,*s;
    int x, cycle = 1;
    head = (node *)malloc(sizeof(node));
    p = head;
    while(cycle)
    {
        std::cout<<"please input the data: ";
        std::cin>>x;
        std::cout<<std::endl;
        if(x != 0)
        {
            s = (node *)malloc(sizeof(node));
            s->data = x;
            p->next = s;
            p = s;
        }
        else
            cycle = 0;
    }
    head = head->next;
    p->next = NULL;
    return head;
}
//单链表测长
int length(node *head)
{
    int n = 0;
    node *p;
    p = head;
    while(p != NULL)
    {
        p = p->next;
        n++;
    }
    return n;
}
//单链表打印
void print(node *head)
{
    node *p;
    int n;
    n = length(head);
    std::cout<<"Now, These "<<n<<" records are: "<<std::endl;
    p = head;
    if(p != NULL)
    {
        while(p != NULL)
        {
            std::cout<<p->data<<" -> ";
            p = p->next;
        }
        std::cout<<std::endl;
    }
}
//单链表删除结点
node* del(node *head, int num)
{
    node *p1,*p2;
    p1 = head;
    while(num != p1->data && p1->next != NULL)
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(num == p1->data)
    {
        if(p1 == head)
        {
            head = p1->next;
            free(p1);
        }
        else
        {
            p2->next = p1->next;
            free(p1);
        }
    }
    else
    {
        std::cout<<num<<" could not been found"<<std::endl;
    }
    return head;
}
//插入结点
node* insert(node *head, int num)
{
    node *p0,*p1,*p2;
    p1 = head;
    p0 = (node *)malloc(sizeof(node));    //待插入的结点
    p0->data= num;
    while(p0->data > p1->data && p1->next != NULL)
    {
        p2 = p1;
        p1 = p1->next;
    }
    if(p0->data < p1->data)
    {
        if(p1 == head)
        {
            p0->next = p1;
            head = p0;
        }
        else
        {
            p0->next = p1;
            p2->next = p0;
        }
    }
    else
    {
        p1->next = p0;
        p0->next = NULL;
    }
    return head;
}
//单链表的排序
node *sort(node *head)
{
    node *p;
    int n, temp;
    n = length(head);
    if(head == NULL || head->next == NULL)
    {
        return head;
    }
    p = head;
    for(int j = 1; j < n; j++)
    {
        p = head;
        for(int i = 0; i < n-j; i++)
        {
            if(p->data > p->next->data)
            {
                temp = p->data;
                p->data = p->next->data;
                p->next->data = temp;
            }
            p = p->next;
        }
    }
    return head;
}

int _tmain(int argc, _TCHAR* argv[])
{
    node *head;
    head = create();
    print(head);
    //删除结点
    int num;
    std::cin>>num;
    head = del(head, num);
    print(head);    //打印删除后的单链表
    //插入结点
    std::cin>>num;
    head = insert(head, num);
    print(head);

    //单链表排序
    head = sort(head);
    print(head);
    return 0;
}
时间: 2024-10-10 19:37:54

单链表(程序员宝典)的相关文章

程序员应该接外包吗?

前阵子连续收到几封来自「程序员客栈」的营销邮件,这引起了我的好奇. 从客栈说起 我每天都会收到大量推广或广告的营销邮件,为什么这个引起了我的注意?恩,这里先跑远点扯点题外话. 客栈这个词让我想起了一部叫<新龙门客栈>的电影,这部电影曾给我留下了十分深刻的印象.还在读小学大约五年级时,学校可能是在什么节日组织全校同学去县里唯一的电影院集体看革命电影.老师同学都坐好了,革命电影开始放映了,但放了不到十分钟就卡壳了,进入黑屏状态.出现紧急状况,影院只好另外找了一部电影来播放救场,然后放的就是这部&l

程序员如何像写代码一样找女朋友

在程序员的世界里,妹子是稀有动物,女神就更是凤毛麟角了,大部分程序员由于经常面对电脑,缺乏与人的沟通交流,加上软件行业的工作特殊性,因此找女朋友更是难上加难.那么,程序员如何用自己的方法去追求心仪的女生呢?有这个冲动的朋友请继续看下去. 1.需求分析 根据自己的性格特点.经济实力,合理定位:适合自己的女性范围,也就是软件工程里常谈到:需求分析.自己最想找什么样的女孩,譬如:身高在什么范 围,年龄在什么范围,学历在什么范围,相貌有什么要求,对性格有什么偏好,喜静还是偏活泼.你越能更多了解自己,知道

大神程序员与疯子

记得霸王别姬中有句话叫"不疯魔不成活".往往把一件事做成功,除了运气就靠疯子精神.其他行业的不懂,也不扯.单说程序员. 大家都羡慕做软件开发的工资高,想入坑,入坑容易坚持下去很难. 1.做软件开发一定要多思考,也就是悟性,技术日新月异的变化,如果抓不住本质,永远学不完,也学不深.所以要多思考.怎么思考呢?像疯子一样的思考,忘我的思考,不停的追根究底.上厕所,坐车,和别人说话,睡觉....都要思考着技术,入魔了,自然就懂了,不是一般的懂,把知识变成自己的一个属性. 疯子都有一个特点,为人

程序员面试,为什么不跟我谈高并发?

作为一个看过几千份简历,面试过几百人的面试官,常常会看到简历中有如下文字: 对业务逻辑解耦,高并发等有比较深入的研究和丰富的开发实战经验 对解决高并发问题有深入理解 熟悉大并发技术,如:反向代理.负载均衡.Keepalived 而当我在面试中,问及对方的职业规划的时候,也有一大半人会回答 希望将来可以处理高并发业务 希望学习高并发相关技术 希望开发数千万/数亿级别并发的应用 但是当我问及以下问题的时候,绝大多数人都会麻爪: 负载均衡有几种分配方式?(大概不到1/10的简历提及高并发的人能答出来)

程序员面试,为什么不要大谈高并发?

作为一个看过几千份简历,面试过几百人的面试官,常常会看到简历中有如下文字: 对业务逻辑解耦,高并发等有比较深入的研究和丰富的开发实战经验 对解决高并发问题有深入理解 熟悉大并发技术,如:反向代理.负载均衡.Keepalived 而当我在面试中,问及对方的职业规划的时候,也有一大半人会回答 希望将来可以处理高并发业务 希望学习高并发相关技术 希望开发数千万/数亿级别并发的应用 但是当我问及以下问题的时候,绝大多数人都会麻爪: 负载均衡有几种分配方式?(大概不到1/10的简历提及高并发的人能答出来)

韩顺平_PHP程序员玩转算法公开课(第一季)02_单链表在内存中存在形式剖析_学习笔记_源代码图解_PPT文档整理

文西马龙:http://blog.csdn.net/wenximalong/链表——最灵活的数据结构链表用来解决复杂的问题和算法是很方便的. 内容介绍1.什么是链表2.单向链表3.双向链表4.环形链表5.使用环形链表解决约瑟夫问题 链表——什么是链表链表是有序的列表,但是它在内存中是分散存储的. 链表无处不在,比如在操作系统中,文件和文件之间,文件块和文件块之间,是靠链表链接起来的.使用链表可以解决类似约瑟夫问题,排序,索引,二叉树,广义表... 链表——单链表的快速入门使用head头的单向链表

[程序员代码面试指南]链表问题-单链表的选择排序(选择排序)

题意 给定一个无序单链表的头节点head,实现单链表的选择排序. 题解 按选择排序方法:每次从原链表找出最小值,从原链表删除,插入新的有序链表. 时间复杂度O(n^2) 额外空间复杂度O(1) 代码 public class Main { public static void main(String args[]) { Node n1=new Node(2); Node n2=new Node(1); Node n3=new Node(3); n1.next=n2; n2.next=n3; No

程序员必读书单

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文地址:http://www.cnblogs.com/figure9/p/developer-reading-list.html 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing

程序员必读书单(转)

作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://lucida.me/blog/developer-reading-list/ 关于 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及延伸阅读.旨在成为最好最全面的程序员必读书单. 前言 Reading makes a full man; conference a ready man; and writing an exact man.