1. 程式人生 > >c++分別用陣列和連結串列實現棧的操作

c++分別用陣列和連結串列實現棧的操作

棧在實際程式設計中經常會用到,本文利用陣列和連結串列分別實現了棧的操作。

1.陣列方式實現如下:

#include<iostream>

using namespace std;

template <class T>
class arraystack{
public:
    arraystack();
    ~arraystack();
    bool isempty();
    void push(const T& data);
    void pop();
    T& gettop();

private:
    T *stacknodes;
    int top;
    int capacity;
};

template<class T>
arraystack<T>::arraystack()
{
    capacity=3;
    stacknodes=new T[3];
    top=-1;
    cout<<"the stack is constructed!"<<endl;
    cout<<"the capacity is:"<<capacity<<endl;
}

template <class T>
arraystack<T>::~arraystack()
{
    delete []stacknodes;
    capacity=0;
    top=-1;
    cout<<"the stack is destructed!"<<endl;
}


template <class T>
bool arraystack<T>::isempty()
{
    if(top==-1)
        return true;
    else
        return false;
}

template <class T>
void arraystack<T>::push(const T& data)
{
    if(top+1==capacity)
    {
        capacity=2*capacity;
        T *p=new T[capacity];
        for(int i=0;i<=top;++i)
            p[i]=stacknodes[i];
        T *q=stacknodes;
        stacknodes=p;
        delete []q;      
        cout<<"the capacity is:"<<capacity<<endl;
    }
    stacknodes[++top]=data;
    cout<<"push in:"<<stacknodes[top]<<endl;
}

template <class T>
void arraystack<T>::pop()
{
    if(!isempty())
        top--;
}

template <class T>
T& arraystack<T>::gettop()
{
    if(!isempty())
        return stacknodes[top];

}

int main()
{
    const int n=5;
    int data;
    arraystack<int> stk;
    int a[n]={4,8,6,12,9};
    for(int i=0;i<n;i++)
        stk.push(a[i]);

    while(!stk.isempty())
     {
         data=stk.gettop();
         cout<<"pop out:"<<data<<endl;
         stk.pop();
     }
}

2.連結串列方式實現如下:
#include<iostream>

using namespace std;

template <class T>
struct linknode{
    T data;
    linknode* next;
};

template <class T>
class mystack{
public:
    mystack();
    ~mystack();
    bool isempty();
    void push(const T& data);
    void pop();
    T& gettop();

private:
    linknode<T> *head;
    linknode<T> *top;
    int length;

};

template <class T>
mystack<T>::mystack()
{
    head=NULL;
    top=NULL;
    length=0;
    cout<<"the stack is constructed!"<<endl;
}

template <class T>
mystack<T>::~mystack()
{
    while(!isempty())
        pop();
    cout<<"the stack is destructed!"<<endl;
}

template <class T>
bool mystack<T>::isempty()
{
    if(head==NULL)
        return true;
    else
        return false;

}

template <class T>
void mystack<T>::push(const T& data)
{
    if(!head)
    {
        head=new linknode<T>;
        head->data=data;
        head->next=NULL;
        top=head;
        length++;
        cout<<"push in:"<<top->data<<endl;
    }
    else
    {
        linknode<T> *p=new linknode<T>;
        p->data=data;
        p->next=NULL;
        top->next=p;
        top=p;
        length++;
        cout<<"push in:"<<top->data<<endl;
    }
}

template <class T>
void mystack<T>::pop()
{
    if(!isempty())
    {
    linknode<T> *p=head;
    if(p==top)
    {
        head=NULL;
        top=NULL;
    }
    else
    {
        while(p->next!=top)
        {
            p=p->next;
        }
        top=p;
        p=top->next;
    }
    delete p;
    length--;
    }
}

template <class T>
T& mystack<T>::gettop()
{
    if(!isempty())
        return top->data;
}

int main()
{
    const int n=5;
    int data;
    mystack<int> stk;
    int a[n]={4,8,6,12,9};
    for(int i=0;i<n;i++)
        stk.push(a[i]);
    while(!stk.isempty())
     {
         data=stk.gettop();
         cout<<"pop out:"<<data<<endl;
         stk.pop();
     }
}


相關推薦

c++分別陣列連結串列實現操作

棧在實際程式設計中經常會用到,本文利用陣列和連結串列分別實現了棧的操作。 1.陣列方式實現如下: #include<iostream> using namespace std; template <class T> class arraysta

分別陣列連結串列實現

    為了更好的理解棧的原理,本文分別用陣列和連結串列實現了棧,     1 陣列實現棧: /* @ brife:陣列實現棧類 */ #include <Windows.h> #ifndef ARRAYSTACK_H #define ARRAYST

陣列連結串列實現

完成一個棧總共需要完成以下操作:初始化入棧出棧檢視棧頂元素檢視棧的容量清空棧。首先是簡單的,用陣列做的,會有越界的可能。#include <stdio.h> #include <stdlib.h> typedef struct Stack {

佇列類(分別列表連結串列實現

#!/usr/bin/python3 class QueueUnderflow(ValueError):     pass class ListQueue():  #列表實現迴圈佇列類     def __init__(self, len_

類(分別列表連結串列實現

#!/usr/bin/python3 class StackUnderflow(ValueError):     pass class ListStack():     def __init__(self):      

陣列連結串列分別實現類stack,隊queue

棧(stack)是一種常見資料結構,以後進先出(LIFO)著稱。比如編譯器用棧處理函式呼叫,儲存被呼叫函式的引數和區域性變數。當一個函式呼叫另一個函式時候,新的函式引數和區域性變數被入棧。呼叫結束,佔用的資源從棧釋放。 用陣列實現: class vector{ priva

陣列連結串列兩種方式實現佇列

手寫陣列實現佇列 1 int queue[20]; 2 int front,rear; 3 4 void clear() 5 { 6 front = rear = -1; 7 } 8 9 int size() 10 { 11 return (rear-front)

佇列的陣列連結串列實現

1.佇列是先入先出額資料結構,它的實現可以用陣列,也可以用連結串列。用陣列實現連結串列時,需要預先分配陣列的大小,用front和rear下標分別表示隊頭元素下標和隊尾元素下標,插入一個元素時,使隊尾的下標rear加1,刪除一個元素時,front下標加1,判斷是否為空的佇列只

陣列連結串列佇列之間的關係及堆之間的關係

本屌最近在學習資料結構過程中,由於連續看了陣列,棧,佇列,連結串列等,一時混雜,下面摘取參考資料,供自己學習使用。 第一部分:介紹了資料儲存結構和資料結構的區別,以及連結串列和陣列的差異。 第二部分:介紹了堆和棧的區別。 (1)資料儲存結構:計算機的一個概念,描述資料在計算機中儲存方式;常用

陣列連結串列描述以及應用

陣列描述棧#pragma warning(disable:4996) #include <iostream> #include<iterator> #include<algorithm> using namespace std; //邊長

C++實現陣列連結串列的排序演算法

OK,我們經常會用到排序演算法。那麼,常用的排序演算法,除了使用陣列之外,用連結串列又該如何處理呢?下面我們來做個對比: //使用插入排序對陣列進行排序 int *get_order(int *num, int length) { for(int eiter = 1; eiter <

一元多項式求和的兩種實現陣列連結串列

一元多項式求和一般都是有兩種實現方式,小編下面就附上我對這兩種方式的理解和實現程式碼。 1.陣列實現。這種方式實現一元多項式加法,是把陣列下標當做一元多項式的指數,在陣列中存放係數。這種方式在實現一元多項是加法是通過遍歷陣列下標來獲取指數資訊,通過指數資訊將係數進行相加。利用陣列在實現一元多項式

基於陣列連結串列兩種方式實現

棧是一種先進後出的資料結構,在實際程式設計棧有很廣泛的用處,Java棧已經幫我們實現好了stack類。 實現棧的兩種方式,基於陣列實現和基於連結串列實現。 1.stack介面 public interface StackADT { //入棧操作 public voi

C++分別指標引用實現交換函式

       前幾天上課老師給出了一個課堂作業:請分別用指標和引用來實現兩個數的交換。雖然題目比較俗套,但是好久沒寫過C++程式了,依然很生疏,所以我決定總結一下自己的實現,程式粗糙,風格也混合著C,希望大家給提提建議。        老師出這個題目的目的無非是想讓我們聯絡

使用陣列連結串列的方式實現

使用 陣列和連結串列 的方式實現 棧 陣列實現棧: public class Stack<Item> implements Iterable<Item> { pri

HashMap實現原理,利用陣列連結串列儲存元素

陣列:儲存區間連續,佔用記憶體嚴重,定址容易,插入刪除困難 連結串列:儲存區間離散,佔用記憶體比較寬鬆,定址困難,插入刪除容易 hashmap綜合應用了這兩種資料結構,實現了定址容易,插入刪除也容易 HashMap結構示意圖: 實現原理:用一個數組來儲存元素,但是這

python實現陣列連結串列的歸併排序

    歸併排序是一種穩定的排序,採用分而治之策略,可以用於順序儲存結構,也易於在連結串列上實現。其原理如下圖:    演算法時間複雜度為  O(nlogn),空間複雜度為 O(n)。1 在陣列上實現d

線性表的陣列實現連結串列實現

線性表的順序儲存實現 //線性表用陣列來實現 typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//係數 int expon;//exponential指數 Polynomial

的建立-----連結串列實現

設計: 1、建立Node節點類(儲存連結串列的前節點和本節點儲存的元素) 2、節點儲存的是泛型資料 3、建立一個棧的介面----定義如下函式: 4、介面實現類(棧頂元素指標和連結串列元素計數器) 程式碼實現: 介面類:StackADT  publi

Java連結串列實現

上一篇實現了佇列,這一篇我們實現棧。 棧是後入先出的資料結構。 連結串列中插入資料有頭插法和尾插法,本篇我們使用頭插法。 不多說直接上程式碼 連結串列的節點定義和上一篇使用的是同一個,可以參考上一篇。 public class StackImpl<T> { p