C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List
C++数据结构模板,可以实现基本功能,用法和stl差不多,比如Q.pop();Q.push(a);Q.front();......
(由于动态链表用的不多,若有错误望各位大神不吝赐教:)
队列:
class Queue
{
private:
int Head,Tail,Size;
int val[]; public: Queue()
{
Head=;
Tail=-;
Size=;
memset(val,,sizeof(val));
} inline bool empty()
{
return Size==;
} inline void push(const int & ele)
{
Tail=(Tail+)%;
Size++;
val[Tail]=ele;
return ;
} inline void pop()
{
if(Size==)return ;
Head=(Head+)%;
Size--;
return ;
} inline int front()
{
if(Size==)return ;
return val[Head];
} inline int back()
{
if(Size==)return ;
return val[Tail];
} inline int size()
{
return Size;
} inline void clear()
{
Head=;
Tail=-;
Size=;
memset(val,,sizeof(val));
return ;
}
}Q;
栈:
class stack
{
private: int Size;
int val[]; int h_top; public: inline int top()
{
return val[h_top];
} inline int size()
{
return Size;
} inline bool pop()
{
if(Size==)return false;
val[h_top]=;
h_top--;
Size--;
return true;
} inline bool push(int temp_s)
{
h_top++;
Size++;
val[h_top]=temp_s;
return true;
} inline void clear()
{
memset(val,,sizeof(val));
h_top=-;
Size=;
return ;
} inline bool empty()
{
return Size==;
}
}st;
动态链表:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime> using namespace std; template<typename _Tp>
class List{
public: class List_val{
private:
List_val *_next;
List_val *_last;
_Tp _data; public:
List_val(){
_next=NULL;
_last=NULL;
_data=;
return ;
} public:
void insert_back(_Tp _new_data){
List_val *_new_elem;
_new_elem=new List_val;
if(_next!=NULL)_new_elem->_next=_next;
if(_next!=NULL)_next->_last=_new_elem;
_new_elem->_last=this;
_next=_new_elem;
_new_elem->_data=_new_data;
return ;
} void insert_front(_Tp _new_data){
List_val *_new_elem;
_new_elem=new List_val;
if(_last!=NULL)_new_elem->_last=_last;
if(_last!=NULL)_last->_next=_new_elem;
_new_elem->_next=this;
_last=_new_elem;
_new_elem->_data=_new_data;
return ;
} public:
List_val* next(){
return _next;
} List_val* last(){
return _last;
} _Tp data(){
return _data;
} public:
void change_next(List_val* _new_next){
_next= _new_next;
return ;
} void change_last(List_val* _new_last){
_last= _new_last;
return ;
} void change_data(_Tp _new_data){
_data= _new_data;
return ;
} void del(){
_last->_next=_next;
_next->_last=_last;
delete[] this;
}
}; private:
List_val *_begin;
List_val *_end; public:
List(){
_begin=new List_val;
_end =new List_val;
_begin->change_next(_end);
_end->change_last(_begin);
return ;
} void push_front(_Tp _new_data){
_begin->insert_back(_new_data);
return ;
} void push_back(_Tp _new_data){
_end->insert_front(_new_data);
return ;
} List_val* begin(){
return _begin->next();
} List_val* end(){
return _end;
} List_val* find(List_val* _from,_Tp _find_data){
List_val *i;
for(i=_from;i!=NULL;i=i->next()){
if(i->data()==_find_data)return i;
} return _end;
} void insert_back(List_val* _from,_Tp _new_data){
_from->insert_back(_new_data);
return ;
} void insert_front(List_val* _from,_Tp _new_data){
_from->insert_front(_new_data);
return ;
} void del(List_val* _from){
_from.del();
return ;
}
}; int main(){
List<int> l;
int i; for(i=;i<=;++i)
l.push_back(i);
for(i=;i<=;++i)
l.push_front(i);
List<int>::List_val *j;
for(j=l.begin();j!=l.end();j=j->next()){
cout << j->data() << ' ' ;
} cout << endl; l.find(l.begin(),)->insert_front();
l.find(l.begin(),)->insert_back();
l.find(l.begin(),)->del();
for(j=l.begin();j!=l.end();j=j->next()){
cout << j->data() << ' ' ;
} cout << endl; return ;
}
C++ 数据结构模板 队列 栈 动态链表 模板 Queue Stack List的更多相关文章
- 数据结构应用实例#栈&单链表#简易计算器
修改BUG的时候一不小心BUG越修越多,鉴于维护程序并不是学习数据结构的初衷,我已经果断的弃坑了!! 以下内容再不更新,Github上的代码直接无法正常编译运行.... 参考参考就好,学习到栈的作用就 ...
- 【LeetCode 232_数据结构_队列_实现】Implement Queue using Stacks
class Queue { public: // Push element x to the back of queue. void push(int x) { while (!nums.empty( ...
- [Python] 数据结构--实现顺序表、链表、栈和队列
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素 ...
- c++学习书籍推荐《数据结构C++语言描述:应用标准模板库STL(第2版)》下载
本书是Ford和Topp两位教授于1996看出版的名著Data Structures with C++的第2版,在全球范围内已经有数以万计的学生从中受益.作者将C++语言作为算法描述语言,应用包含规范 ...
- SDUT-2131_数据结构实验之栈与队列一:进制转换
数据结构实验之栈与队列一:进制转换 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入一个十进制非负整数,将其转换成对 ...
- 【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题
2016-06-18 当时关于块状链表的想法是错误的,之前维护的是一个动态的$\sqrt{n}$,所以常数巨大,今天才知道原因TwT,请不要参照这个程序为模板!!! 模板题水啊水~~~ 第一次写块状链 ...
- C++采用模板实现栈的方法
今天又看了遍<effective C++>,手动实现了一下条款42中的栈,贴出来当博客的处女贴. 首先栈的声明如下,采用了模板传入类型,而栈的底层采用是个链表. // stack.h // ...
- springboot mail整合freemark实现动态生成模板
目标:1:springboot 整合 mail2: mail 使用freemark 实现模板动态生成(就是通过字符串生成模板,不需要在工程中写入固定模板)3: springboot 整合aop 实现日 ...
- Python列表操作与深浅拷贝(5)——数字处理函数、类型判断、列表链表队列栈
python内建数据结构 分类 数值型: int float complex bool 序列对象: 字符串str 列表list 元组tuple 键值对: 集合set 字典dict 数值型 (list ...
随机推荐
- jQuery的jsop,jsonp跨域请求
https://www.cnblogs.com/chiangchou/p/jsonp.html
- 【转载】UML图示与代码对照
一.类继承 public class Father { } public class Child : Father { } 二.接口继承 public interface IBreath { } pu ...
- PCB genesis大孔加小孔(即卸力孔)实现方法
一.为什么 大孔中要加小孔(即卸力孔) 这其实跟钻刀的排屑有关了,当钻刀越大孔,排屑量也越大(当然这也得跟转速,下刀速的参数有关系),通常当钻刀越大,转速越慢,下刀速也越慢(因为要保证它的排屑通畅). ...
- codevs4511信息传递(Tarjan求环)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- composer 下载安装
linux/mac os curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/compos ...
- ACM_堆箱子咯(栈)
堆箱子咯 Time Limit: 2000/1000ms (Java/Others) Problem Description: 双十一大家都在买买买,可忙坏了快递小哥了.zl和皮卡鸡在大伙在剁手的时候 ...
- 【转】linux read 用法
转自:http://www.cnblogs.com/iloveyoucc/archive/2012/04/16/2451328.html 1.基本读取 read命令接收标准输入(键盘)的输入,或其他文 ...
- No operations allowed after connection closed--转
https://www.jianshu.com/p/1626d41572f2 Spring boot的单数据源配置比较简单,只需要在application.properties配置相关的jdbc连接的 ...
- Spring Cloud (11) Hystrix-监控聚合监控
上一篇利用Hystrix Dashboard去监控断路器的Hystrix command,当我们有很多服务的时候,就需要聚合所有服务的Hystrix Dashboard数据了,这就需要Hystrix ...
- C#学习-处理Excel
首先先了解下一个Excel文件的组成 1.一个Excel包含多个工作表(Sheet) 2.一个工作表(Sheet)包含多行(Row) 3.一行(Row)包含多个单元格(Cell) 如何判断一个单元 ...