C++ 使用模板实现一个List的实例

C ++使用模板写的一个List

template<class T>
class List
{
private:
  struct Node
  {
    T data;
    Node *next;
  };
  //head
  Node *head;
  //size
  int length; 

  //process
  Node *p; 

  //temp
  Node *q;
public:
  List()
  {
    head = NULL;
    length = 0;
    p = NULL;
  }
  void add(T t)
  {
    if(head == NULL)
    {
      q = new Node();
      q->data = t;
      q->next = NULL;
      length ++ ;
      head = q ;
      p = head;
    }
    else
    {
      q = new Node();
      q->data = t;
      q->next = NULL;
      length ++;
      p -> next = q;
      p = q;
    }
  } 

  void remove(int n)
  {
    if(n >= length )
    {
      return;
    }
    length -- ; 

    //删除头节点
    if(n == 0)
    {
      q = head ;
      head = head -> next;
      delete(q);
    }
    else
    {
      q = head;
      for(int i = 0 ; i < n-1 ; i++)
      {
        q = q -> next;
      }
      Node *t = q ->next;
      q->next = q->next ->next;
      delete(t); 

    } 

    //
    p = head;
    if (p != NULL)
    {
      while(p->next != NULL)
      {
        p = p->next;
      }
    } 

  } 

  int getSize()
  {
    return length;
  } 

  int getLength()
  {
    return getSize();
  } 

  T get(int n)
  {
    q = head;
    for (int i = 0 ;i < n ; i++)
    {
      q = q->next;
    }
    return q->data;
  } 

};

调用方式如下

List<Stu>list;
  Stu stu1;
  Stu stu2;
  Stu stu3;
  stu1.username = "1";
  stu2.username = "2";
  stu3.username = "3"; 

  list.add(stu1);
  list.remove(0);
  list.add(stu2);
  list.add(stu3); 

  for (int i = 0 ;i < list.getSize() ; i ++)
  {
    cout << list.get(i).username;
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • C++中list的使用方法及常用list操作总结

    C++中list的使用方法及常用list操作总结 一.List定义: List是stl实现的双向链表,与向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.使用时需要添加头文件 #include <list> 二.List定义和初始化: list<int>lst1;          //创建空list     list<int> lst2(5);       //创建含有5个元素的list     list<int>lst3(3,2

  • C++中 STL list详解及简单实例

    C++中 STL list详解 1.List: 内部实现是一个双向链表,可以高效的进行插入删除,但不能够进行随机访问 2..示例程序: #include "stdafx.h" #include <iostream> #include <list> #include <iterator> #include <algorithm> using namespace std; const int num[5] = {1,3,2,4,5}; boo

  • C++ list的实例详解

     C++ list的实例详解 Source: #include <iostream> #include <list> #include <numeric> #include <algorithm> using namespace std; typedef list<int> LISTINT; //创建一个list容器的实例LISTINT typedef list<int> LISTCHAR; //创建一个list容器的实例LISTCH

  • C++ 模拟实现list(迭代器)实现代码

    C++ 模拟实现list(迭代器) 实现代码: #pragma once; #include <assert.h> #include<iostream> #include <assert.h> using namespace std; template<class T> struct __ListNode { T _data; __ListNode<T>* _next; __ListNode<T>* _prev; __ListNode

  • C++ 中CListCtrl的每个项都显示不同的提示信息

    C++ 中CListCtrl的每个项都显示不同的提示信息 添加CToolTipCtrl成员变量m_toolTipCtrl,CListCtrl成员变量m_ListUser,CImageList成员变量m_imageList(这个可以不要) 在OnInitDialog()函数里加下面代码 m_BoradcastEnd.EnableWindow(FALSE); m_imageList.Create(32, 32, ILC_COLOR8, 2, 2); DWORD dwStyle = m_ListUse

  • C++语言 STL容器list总结

    在使用std::list<>链表时,难免会对数据进行添加删除操作.而遍历链表则有两种方式:通过索引访问,象数组一样处理:通过std::list<>::iterator链表遍历器进行访问 STL 中的list 就是一 双向链表,可高效地进行插入删除元素. list不支持随机访问.所以没有 at(pos)和operator[]. list 对象list1, list2 分别有元素list1(1,2,3),list2(4,5,6) .list< int>::iterator

  • C++ STL入门教程(2) list双向链表使用方法(附程序代码)

    一.简介 "Unlike other standard sequence containers, list and forward_list objects are specifically designed to be efficient inserting and removing elements in any position, even in the middle of the sequence." Lists将元素按顺序储存在链表中.与向量(vector)相比, 它允许快速

  • C++中CSimpleList的实现与测试实例

    本文实例讲述了C++简单列表类的实现方法.分享给大家供大家参考.具体方法如下: _AFXTLS.CPP文件如下: //#include "StdAfx.h #include <stddef.h> #include <stdio.h> #include "_AFXTLS_.H" struct MyThreadData{ MyThreadData* pNext; int nShortData; }; void CSimpleList::AddHead(vo

  • C++ 使用模板实现一个List的实例

    C ++使用模板写的一个List template<class T> class List { private: struct Node { T data; Node *next; }; //head Node *head; //size int length; //process Node *p; //temp Node *q; public: List() { head = NULL; length = 0; p = NULL; } void add(T t) { if(head == N

  • POI通过模板导出EXCEL文件的实例

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. File fi = new File("F:/usr/user.

  • Vue模板语法中数据绑定的实例代码

    1.单项数据绑定 <div id="di"> <input type="text" :value="input_val"> </div> <script> var app = new Vue({ el: '#di', data: { input_val: 'hello world ' } }) </script> 通过浏览器 REPL 环境可以进行修改 app.input_val = '

  • Django模板获取field的verbose_name实例

    创建一个名为templatetags的python module. 新建一个名为verbose_name.py的文件. from django import template register = template.Library() @register.simple_tag def get_verbose_field_name(instance, field_name): """ Returns verbose_name for a field. ""&

  • Access使用宏控制程序--1.5.一个宏的实例——检验口令

    5.一个宏的实例--检验口令 在这个实例中将创建一个将包含条件的宏组,用来实现对口令的检验,如果口令正确,就先关闭这个身份核对窗口,再打开另一个窗体:如果口令不正确,将出现信息框要求重新输入口令. 建立一个窗体,添加文本框,命名为"管理员口令",用来接收用户输入的口令.再建立一个确定按钮和一个取消按钮. 为按钮建立一个宏组,宏的设计视图如上图. "条件"栏内的省略号(-),表示条件为真时可以连续第执行这些操作. 这是窗体运行的效果. 当输入的口令不正确时,单击确定按

  • Oracle sqlldr导入一个日期列实例详解

    Oracle sqlldr导入一个日期列实例详解 1. LOAD DATA INFILE * INTO TABLE test FIELDS TERMINATED BY X'9' TRAILING NULLCOLS ( c2 "upper(:c2)", c3 date "yyyymmdd", c1 "SEQ_test_c1.nextval" ) BEGINDATA AAAAAAAAAA 20051201 BBBBBBBBBB 20050112 CR

  • js代码延迟一定时间后执行一个函数的实例

    实例如下: setTimeout(funcName,500); function funcName() { xxxxxx; } 0.5秒后执行funcName(),只执行一次 setInterval(funcName,5000);   每隔5秒执行一次funcName() 以上这篇js代码延迟一定时间后执行一个函数的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 用js写的一个路由(简单实例)

    前几天在网上看了一个大牛用js写了一个路由的,有一句代码一直不知道怎么回事,后来就自己写了一个,写的比较的粗糙,我觉得把面向对象的思想都搞得乱七八糟的,不过功能实现了. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js实现路由</title> </head> <body> &l

  • 数据结构用两个栈实现一个队列的实例

    数据结构用两个栈实现一个队列的实例 栈是先进后出,队列是先进先出 每次元素都push在st1中,pop的时候如果st2为空,将st1的栈顶元素放在st2的栈底,这样st1的所有元素都放在st2中,st1的栈底就是st2的栈顶,pop st2的栈顶,这样就满足了队列的先进先出. #include <iostream> using namespace std; #include <stack> #include <stdlib.h> template <class T

  • 给easyui datebox扩展一个清空的实例

    如下所示: /** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; (function ($) { var buttons = $.extend([], $.fn.datebox.defaults.buttons); buttons.splice(1, 0, { text: function (target) { return $(target).datebox("options").cleanText }, h

随机推荐