链表学习一:单链表创建-头插入与尾插入

  链表的创建过程是一个动态的生成过程,创建链表有两种思路,一种是从表头插入,另一种是从表尾插入。

  表头插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止。

  表尾插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止。

  两种方法C++实现如下:

 1 #include<iostream>
 2 using namespace std;
 3
 4 typedef int elemtype;
 5 typedef struct node
 6 {
 7     elemtype m_nData;
 8     node* m_pNext;
 9 }ListNode;
10
11 //创建链表一:头插法建表
12 ListNode* CreateList(ListNode* m_pHead){
13     m_pHead = new ListNode;
14     if (!(m_pHead))
15     {
16         cout << "分配内存空间失败!";
17     }
18     int  listsize = 10;
19     cout << "请输10个数字:"<<endl;
20     m_pHead->m_pNext= NULL;
21     for (int i = listsize; i > 0; i--)
22     {
23         ListNode* m_pTemp = m_pHead;
24         ListNode*m_pNewNode = new ListNode;
25         cin>> m_pNewNode->m_nData;
26         m_pNewNode->m_pNext = m_pTemp->m_pNext;
27         m_pTemp->m_pNext = m_pNewNode;
28     }
29     return m_pHead;
30 }
31
32 //创建链表二:尾插法创建
33 ListNode* CreateList2(ListNode* m_pHead){
34     m_pHead= new ListNode;
35     if (!(m_pHead))
36     {
37         cout << "分配内存空间失败!";
38     }
39     m_pHead->m_pNext = NULL;
40     ListNode* pTail =m_pHead;
41
42     int  listsize = 10;
43     cout << "请输10个数字:" << endl;
44
45     for (int i = listsize; i >0; i--)
46     {
47         ListNode* pNewNode = new ListNode;
48         cin >> pNewNode->m_nData;
49         pTail->m_pNext = pNewNode;
50         pTail = pNewNode;
51         pNewNode->m_pNext = NULL;
52     }
53     return m_pHead;
54 }
55 //打印链表
56 void printList(ListNode* m_pHead){
57     ListNode* m_pTemp=m_pHead;
58     while (m_pTemp->m_pNext )
59     {
60         m_pTemp = m_pTemp->m_pNext;
61         cout << m_pTemp->m_nData << "\t";
62     }
63     cout << endl;
64 }
65
66 void main()
67 {
68     ListNode* m_pList=NULL;
69     m_pList= CreateList(m_pList);
70     printList(m_pList);
71
72     ListNode* m_pList2 = NULL;
73     m_pList2 = CreateList2(m_pList2);
74     printList(m_pList2);
75 }
时间: 2024-08-24 12:55:57

链表学习一:单链表创建-头插入与尾插入的相关文章

数据结构学习之单链表基本操作

数据结构学习之单链表基本操作 0x1 前言 今天实验课,学习了下单链表的写法,这里记录下. 0x2 正文 题目要求如下: 本实验的单链表元素的类型为char,完成如下实验要求: (1)初始化单链表h (2)采用尾插法依次插入a.b.c.d.e (3)输出单链表h (4)输出单链表h的长度 (5)判断单链表h是否为空 (6)输出单链表h的第3个元素 (7)输出元素a的逻辑位置 (8)在第4个元素位置上插入元素f (9)输出单链表h (10)删除单链表h的第3个元素 (11)输出单链表h (12)释

【数据结构】用C++实现双链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//[数据结构]用C++实现双链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #ifndef _LIST_H #define _LIST_H #include<iostream> using namespace std; template<class Type> class DList; template<class Type> class ListNode { friend class DList<Type>; public: L

【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)

//[数据结构]用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等) //头文件 #ifndef _CDLIST_H #define _CDLIST_H #include<iostream> using namespace std; template<class Type> class CDList; template<class Type> class ListNode { friend class CDList<Type>; p

数据结构实验之链表五:单链表的拆分

数据结构实验之链表五:单链表的拆分 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入N个整数顺序建立一个单链表,将该单链表拆分成两个子链表,第一个子链表存放了所有的偶数,第二个子链表存放了所有的奇数.两个子链表中数据的相对次序与原链表一致. 输入 第一行输入整数N;: 第二行依次输入N个整数. 输出 第一行分别输出偶数链表与奇数链表的元素个数: 第二行依次输出偶数子链表的所有数据: 第三行依次输出奇数子链表的所有数据. 示例输入 10 1 3 22

静态单链表和动态单链表的区别

链表中结点的分配和回收是由系统提供的标准函数malloc和free动态实现的,称之为动态链表. 如果程序支持指针,则可按照我们的一般形式实现链表, 需要时分配,不需要时回收即可. 动态链表的空间是可以动态扩展的. typedef struct  node{ EleType data; struct node * pNext; }Node; 有些高级语言中没有"指针"数据类型,只能用数组来模拟线性链表的结构, 数组元素中的指针"域"存放的不是元素在内存中的真实地址,而

C++ 数据结构学习二(单链表)

模板类 //LinkList.h 单链表#ifndef LINK_LIST_HXX#define LINK_LIST_HXX#include <iostream>using namespace std; template<class T>struct Node{ T data; Node * next;}; template<class T>class LinkList{ public: LinkList(); //无参构造函数,建立只有头结点的空链表 LinkList

c++学习笔记—单链表基本操作的实现

用c++语言实现的单链表基本操作,包括单链表的创建(包括头插法和尾插法建表).结点的查找.删除.排序.打印输出.逆置.链表销毁等基本操作. IDE:vs2013 具体实现代码如下: [cpp] view plaincopy #include "stdafx.h" #include <malloc.h> #include <iostream> using namespace std; typedef struct Lnode { int data; struct 

数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)

链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链. 链表分为单链表.双链表.循环链表. 一.单链表 插入:链表中插入一个节点的效率很高.向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图). 由上图可知,B.C之间插入D,三者之间的关系为 current为插入节点的前驱节点 current->next = new              // B节点指向新节点D new->n

链表1-单链表

链表也是一种线性表,但与线性表不同的是,链表的物理存储结构是一堆地址任意的存储单元.也就是说,链表的数据在内存中的物理位置可能相互邻接,也有可能不邻接. 单链表的基本操作如下: 1 //链表的基本操作 2 //定义结点类 3 template <typename Type> class Node{ 4 public: 5 Type data; 6 Node<Type> *next; 7 Node(const Type &_data){ 8 data=_data; 9 nex