1. 程式人生 > >簡單資料結構之 vector 棧(C++ vector 實現)

簡單資料結構之 vector 棧(C++ vector 實現)

/*
 ============================================================================
 Name        : stack_array.cpp
 Author      : ntsk13 [email protected]
 Version     :
 Copyright   : GPL
 Description : stack array study, complement by C++
 Date        : 2015.06.17
 ============================================================================
 */

#include <iostream>
#include <vector>
using namespace std;

#define STACK_CAPACITY 10
typedef struct {
	int data;
}Elem_t;

class  stack {
public:
	vector<Elem_t> v;
	int top;
	int capacity;
	int cur_len;

	void init();
	void clear();
	bool is_empty();
	Elem_t get_top_elem();
	bool push(Elem_t e);
	bool pop(Elem_t &e);
	int get_len();
	void traverse();
};

int main(void) {
	stack S;
	Elem_t zero,one,two,three,four,five,six;
	zero.data=0;
	one.data=1;
	two.data=2;
	three.data=3;
	four.data=4;

	S.init();
	cout<<"S is empty ? "<<( (S.is_empty()) ?"Yes":"No")<<endl;
	S.pop(six);

	S.push(zero);
	S.push(one);
	S.push(two);
	S.push(three);
	S.push(four);
	cout<<"S is empty ? "<< (S.is_empty() ?"Yes":"No")<<endl;
	five=S.get_top_elem();
	S.traverse();
	
	cout<<"len is "<<S.get_len()<<endl;
	cout<<"============================================="<<endl;
	S.pop(six);
	S.pop(five);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	S.push(four);
	cout<<"len is "<<S.get_len()<<endl;
	S.traverse();

	return 0;
}

void stack::init()
{
	capacity=STACK_CAPACITY;
	cur_len=0;		
	top=-1;
}
void stack::clear()
{
	cur_len=0;		
	top=-1;
}
bool stack::is_empty()
{
	return (top==-1)?true:false;
}
Elem_t stack::get_top_elem()
{
	return v.at(top);
}
bool stack::push(Elem_t e)
{
	if( top==capacity-1)
	{
		cout<<"It is full, can not push !!!"<<endl;
		return false;
	}
	top++;
	v.push_back(e);
	
	cur_len++;
	return true;
}
bool stack::pop( Elem_t & e)
{	
	int tmp=top;
	if( is_empty() )
	{
		cout<<"It is empty, can not pop !!!"<<endl;
		return false;
	}
	top--;
	cur_len--;
	e=v.at(tmp);
	return true;
}
int stack::get_len()
{
	return cur_len;
}
void stack::traverse()
{	int t=top;
	for(int i=0;i<cur_len;i++)
		cout<<"The "<<i<<"th elem is "<<(v[t--]).data<<endl;
}

相關推薦

資料結構連結串列C語言實現以及使用場景分析

連結串列是資料結構中比較基礎也是比較重要的型別之一,那麼有了陣列,為什麼我們還需要連結串列呢!或者說設計連結串列這種資料結構的初衷在哪裡? 這是因為,在我們使用陣列的時候,需要預先設定目標群體的個數,也即陣列容量的大小,然而實時情況下我們目標的個數我們是不確定的,因此我們總是要把陣列的容量設定的

資料結構陣列(C語言實現

陣列是大家很熟悉的一種資料型別,而且在我們的程式設計中也應用非常廣泛。這裡以抽象資料型別的形式討論陣列的定義和實現。 一、陣列的定義 假設n維陣列中含有第i維的長度為b(i),則陣列的總長度為b(0) *b(1)*...*b(n-1),每個元素都受著n個

資料結構堆排序C語言實現

堆排序: 時間複雜度:O(nlogn) 穩定性:不穩定 實現原理:將待排序的序列構造成一個大頂堆(或小頂堆) 整個序列的最大值就是堆頂的根節點,將它移走 (就是將其與對陣列的末尾元素交換,此時末尾元素就是最大值)。然後將剩餘的n-1個序列重新 構成

簡單資料結構 vector (C++ vector 實現)

/* ============================================================================ Name : stack_array.cpp Author : ntsk13 [em

c++STL 資料結構stack應用

規則:   先入後出!!!! 1.stack基本用法: 定義stack 物件的示例程式碼如下: stack<int> s1; stack<string> s2; stack<int> p[10]; stack 的基本操作有: 入棧,如例:

數據結構順序(C++版)

length init space 存在 type 容量 長度 define 入棧 #include <iostream>#include <stdlib.h>#define MAXLISTSIZE 100 //預設的存儲空間最大容量using n

資料結構鏈式表的實現--單鏈表(C語言)

學習參考: 嚴蔚敏: 《資料結構-C語言版》 基本操作: 單鏈表的建立 新增結點(頭插法) 新增結點(尾插法) 單鏈表的輸出 單鏈表的修改 單鏈表的插入 單鏈表的刪除 單鏈表按

資料結構鏈式表的實現--單向迴圈連結串列(C語言)

 學習參考: 嚴蔚敏: 《資料結構-C語言版》 單向迴圈連結串列的基本操作 單向迴圈連結串列的建立 單向迴圈連結串列新增結點(頭插法) 單向迴圈連結串列新增結點(尾插法) 單向迴圈連結串列

C++資料結構鏈式佇列模版實現

鏈佇列的儲存結構   將對頭指標front指向鏈佇列的頭結點(頭節點為空,不存資料),隊尾指標rear指向終端結點。元素從隊尾進入,隊首出列。 元素為空時,隊尾指標指向隊頭指標。 鏈式佇列模版實現: 功能: 1 建立 2 遍歷 4 入隊,出隊 5 獲取

資料結構實現迷宮問題(dfs)

給一個n*n的方格,讓你求從左上角到所給一點的任意一條路徑並輸出 該題用到dfs,以下是對dfs的簡要解析  :詳解請參見 傳送門 dfs是一種用於遍歷或搜尋樹或圖的演算法。 沿著樹的深度遍歷樹的節點,儘可能深的搜尋樹的分支。當節點v的所在邊都己被探尋過或者在搜尋時結點不

JavaScript資料結構互搏

今天稍微停下前進的腳步,來看下隊棧的左右互搏術。 前兩天學習了佇列和棧以後,今天就可以試著來用兩個棧實現佇列的功能 或者 用兩個佇列來實現棧的功能。 資料結構之---棧實現佇列 1. 用兩個棧實現一個佇列 1.1 題目分析 棧是先進後出,佇列是先進先出,但可以用兩個棧來模擬一個佇列的功能,來實現

Algorithm——簡單資料結構佇列和連結串列(十三)

Algorithm——簡單資料結構之佇列和連結串列佇列是一種先進先出策略,而連結串列中的各元素按線性順序排列。陣列的線性順序是由陣列的下標決定的,但連結串列的順序是由各個物件裡的指標決定的。佇列有入隊和出隊操作,連結串列則有插入、刪除、查詢表中節點的操作。佇列和雙向連結串列的

資料結構圖(鄰接表實現)(C++)

一、圖的鄰接表實現 1.實現了以頂點順序表、邊連結串列為儲存結構的鄰接表; 2.實現了圖的建立(有向/無向/圖/網)、邊的增刪操作、深度優先遞迴/非遞迴遍歷、廣度優先遍歷的演算法; 3.採用頂點物件列表、邊(弧)物件列表的方式,對圖的建立進行初始化;引用 "ObjArr

資料結構堆疊(c

相關知識 1.函式封裝 2.堆疊(先進後出,後進先出) 3.指標(記憶體申請,結構體運用) 標頭檔案及其宣告 #ifndef STACKLIST_H_INCLUDED #define STAC

資料結構中順序c語言程式碼實現

一.sqstack.h標頭檔案的程式碼 #ifndef __SQSTACK_H__ #define __SQSTACK_H__ #include<stdio.h> #include<stdlib.h> typedef int datatype; ty

軟考:資料結構基礎——迴圈佇列C語言實現

  迴圈佇列得實現: 1.     在入隊和出隊時,我們通過      q->rear = (q->rear +1)%MAX_LENTH 來實現迴圈入隊     q

資料結構順序表的java實現

通過查詢資料,再加上我的理解,初步建立了順序表,可以實現的功能有:查值、取值、插入、刪除。 1、建立一個介面,介面中存放你所希望的順序表所實現的功能。 public interface List1 { //線性表介面List給出了任何實現線性表功能的類中必須要

Java版資料結構迴圈連結串列的實現

簡介 在指定結點後新增一個結點 刪除指定結點的下一個結點 獲取下一個結點 獲取結點資料 public class LoopNode { int data;//資料域 LoopNode next;//下一個結點 public Loop

資料結構串的定義及實現

串的基本定義及實現 串型別的定義 定長順序儲存形式 堆分配儲存形式 1.1、串型別的定義 串(string)是零個或多個字元組成的有限序列 , S=‘a1a2…an’(n>=0) 其中,s是串名

[資料結構]魔王語言解釋 c語言實現

 [問題描述] 有一個魔王總是使用自己的一種非常精練而又抽象的語言講話,沒有人能聽得懂,但他的語言是可以逐步解釋成人能聽懂的語言,因為他的語言是由以下兩種形式的規則由人的語言逐步抽象上去的: (1) α -> β1β2…βm (2)(θδ1δ2…δn)->θδn