c++学习笔记—单链表基本操作的实现
用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表)、结点的查找、删除、排序、打印输出、逆置、链表销毁等基本操作。
IDE:vs2013

具体实现代码如下:
- #include "stdafx.h"
- #include <malloc.h>
- #include <iostream>
- using namespace std;
- typedef struct Lnode
- {
- int data;
- struct Lnode *next;
- }*node;
- node head_creat() //头插法建立单链表
- {
- node head = (struct Lnode *)malloc(sizeof(struct Lnode));
- head->next = NULL;
- node p;
- int temp;
- while (cin >> temp)
- {
- p = (node)malloc(sizeof(struct Lnode));
- p->data = temp;
- p->next = head->next;
- head->next=p;
- }
- return head;
- }
- bool search(node h, int target) //查找某元素是否在链表中
- {
- int flag = 0;
- node p = h->next;
- if (h->next == NULL)
- return false;
- for (; p != NULL;)
- {
- if (p->data == target)
- {
- flag = 1;
- break;
- }
- else
- p++;
- }
- if (flag)
- return true;
- else
- return false;
- }
- node back_creat() //尾插法建立单链表
- {
- node head = (struct Lnode *)malloc(sizeof(struct Lnode));
- head->next = NULL;
- node p;
- node r = head;
- int temp;
- while (cin >> temp)
- {
- p = (node)malloc(sizeof(struct Lnode));
- p->data = temp;
- r->next=p;
- r = p;
- }
- r->next = NULL;
- return head;
- }
- void print(node h) //打印单链表
- {
- node p = h->next;
- while (p)
- {
- cout << p->data << endl;
- p = p->next;
- }
- }
- node delete_node(node h,int del_val) //删除指定值的节点
- {
- node p = h->next;
- node q = h;
- node r=NULL;
- while (p)
- {
- if (p->data == del_val)
- {
- r = p;
- p = p->next;
- q->next = p;
- free(r);
- }
- else
- {
- q = p;
- p = p->next;
- }
- }
- return h;
- }
- node sort(node h) //对链表进行排序(降序)
- {
- node p=h->next;
- if (p->next == NULL)
- return h;
- for (; p != NULL; p = p->next)
- {
- for (node q = p->next; q != NULL; q = q->next)
- {
- int temp;
- if (p->data > q->data)
- {
- temp = p->data;
- p->data = q->data;
- q->data = temp;
- }
- }
- }
- return h;
- }
- node reverse(node h) //逆置链表
- {
- node p, q;
- p = h->next;
- h->next = NULL;
- while (p)
- {
- q = p;
- p = p->next;
- q->next = h->next;
- h->next = q;
- }
- return h;
- }
- void destroy_List(node head) //销毁链表
- {
- if (NULL == head)
- {
- return;
- }
- if (NULL == head->next)
- {
- free(head);
- head = NULL;
- return;
- }
- node p = head->next;
- while (NULL != p)
- {
- node tmp = p;
- p = p->next;
- free(tmp);
- }
- free(head);
- head = NULL;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "---------------构造链表-------------" << endl;
- node h = back_creat();
- cout << "---------------打印链表-------------" << endl;
- print(h);
- //cout << "-----------删除指定值后打印链表-----" << endl;
- //h = delete_node(h, 2);
- //print(h);
- cout << "-----------排序后打印链表------------" << endl;
- h = sort(h);
- print(h);
- cout << "-----------逆置后打印链表------------" << endl;
- h = reverse(h);
- print(h);
- destroy_List(h);
- return 0;
- }
运行结果:

c++学习笔记—单链表基本操作的实现的更多相关文章
- C++ 单链表基本操作
链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...
- [Golang学习笔记] 08 链表
链表(Linked list)是一种常见数据结构,但并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针. 由于不必须按顺序存储,链表在插入的时候可以达到O(1),比顺序表快得多,但是查 ...
- linux C学习笔记03--单链表
单链表一直是程序员的基础,我也来复习下,下面是link.c中的代码,供main.c 调用,代码很简单,单链表的插入,删除,查找和遍历输出, #include <stdio.h> #incl ...
- C++ 数据结构学习二(单链表)
模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespa ...
- C++面试笔记--单链表
1.编程实现单链表删除节点. 解析:如果删除的是头节点,如下图: 则把head指针指向头节点的下一个节点.同时free p1,如下图所示: 如果删除的是中间节点,如下图所示: 则用p2的n ...
- C++学习笔记48:链表的基本操作
//链表的基本操作 //生成链表,插入结点,查找结点,删除结点,遍历链表,清空链表 //链表类模板 //LinkedList.h #ifndef LINKEDLIST_H #define LINKED ...
- 学习笔记之NodeJs基本操作
nodejs安装见文章:windows下安装node.js及less 运行js文件:node xxx.js 调用http模块,并指定端口为3000,向客户端输出<h1>Node.js< ...
- Python学习笔记020——数据库基本操作
本数据库的操作是Linux虚拟机平台下进行的 1 启动和链接MySQL服务 1.1 服务端 (1)查看服务状态 sudo /etc/init.d/mysql stauts (2)启动服务端 sudo ...
- C语言学习016:单链表
#include <stdio.h> //定义一个链表,链表是一种递归结构,在定义的时候必须要给结构起一个名字 typedef struct folder{ int level; char ...
随机推荐
- 三个支持正则表达式的行处理的工具: grep/sed/awk
grep: 全称Global Regular Expression Print, 是干什么的,不多说了: 用法:grep [-options] [pattern] [filename] 选项: -c: ...
- 第三百四十节,Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器
第三百四十节,Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器 css选择器 1. 2. 3. ::attr()获取元素属性,css选择器 ::text获取标签文本 举例: extr ...
- MyBatis SqlSessionDaoSupport实例
在前面的章节中,我们已经讲到了基本的 mybatis 操作,但都是基于 mapper 隐射操作的,在 mybatis3 中这个 mapper 接口貌似充当了以前在ibatis 2中的 DAO 层的作用 ...
- java的GUI程序的基本思路是以JFrame为基础
JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化.最小化.关闭. JPanel – Java图形用户界面(GUI)工具包swing中的面 ...
- Eclipse中创建Maven项目失败
Eclipse中创建Maven项目报错:Unable to create project from archetype org.apache.maven.archetypes:maven-archet ...
- OpenStack提交代码的review流程
本文整理向openstack社区提交代码的基本流程,以及社区一些介绍资料.如有转载,请注明出处! 先放张图说明一下OpenStack的code review的大体流程: 对OpenStack提交代码更 ...
- Python——eventlet.greenpool
该模块提供对 greenthread 池的支持. greenthread 池提供了一定数量的备用 greenthread ,有效限制了孵化 greenthread 过多导致的内存不足,当池子中没有足够 ...
- (原创)OpenStack服务如何使用Keystone (二)---部署和配置Keystone中间件
(一)Keystone端的操作 (二)如何在OpenStack服务上部署Keystone中间件 (三)详细配置keystonemiddleware 部署OpenStack时一般先安装Keystone服 ...
- 安装配置和使用HBASE Cluster(基于发行版CDH5.0.2)——系列随笔
本系列文章只是记录了笔者本人在学习实验安装和使用基于CDH5.0.2的HBASE集群过程中的一些经验教训和心得,绝不是详细的安装过程,因本人不过一初学者,很多方面不甚了了,如果能让不幸读到的人有所得则 ...
- 【WP8】LoopingSelector
WP8的WindowsPhoneToolkit工具包中有一个 LoopingSelector 可以想选择日期或时间一样进行选择 1.首先当然是引用WindowsPhoneToolkit 在Nuget控 ...