1. 程式人生 > >(C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧

(C語言)簡單明瞭的 陣列模擬棧+ (C++)陣列模擬棧

C語言資料結構中的很多東西都能夠通過陣列和連結串列來實現,所以熟練陣列和連結串列是很有必要的。

棧的特點就是先進後出,如圖輸出。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>//memset庫源

using namespace std;

struct Stack
{
    char space[1024];
    int top;
};

void init(Stack *s)
{
    s->top=0;
    memset(s->space,0,1024);
}

bool Isfull(Stack *s)
{
    return s->top==1024;
}

char pop(Stack *s)
{
    return s->space[--s->top];
}

void push(Stack *s,char c)
{
    s->space[s->top++]=c;
}

int Is_empty(Stack *s)
{
    if(s->top==0)
        return 1;
    return 0;
}

int main()
{
    Stack st;
    init(&st);
    if(!Isfull(&st))
        push(&st,'a');
    if(!Isfull(&st))
        push(&st,'b');
    if(!Isfull(&st))
        push(&st,'c');
    if(!Isfull(&st))
        push(&st,'d');
    if(!Isfull(&st))
        push(&st,'e');
    if(!Isfull(&st))
        push(&st,'f');

    while(!Is_empty(&st))
        cout<<pop(&st)<<endl;
    return 0;
}

如果在純C下,把cout輸出改用printf

#include <iostream>
#include <memory.h>

using namespace std;

struct Stack
{
    void init();
    bool isEmpty();
    bool isFull();
    char pop();
    void push(char c);
private:
    char space[1024];
    int top;
};
void Stack::init()
{
    top=0;
    memset(space,0,1024);
}

bool Stack::isEmpty()
{
    return top==0;
}

bool Stack::isFull()
{
    return top==1024;
}

char Stack::pop()
{
    return space[--top];
}

void Stack::push(char c)
{
    space[top++]=c;
}

int main()
{
    Stack st;
    st.init();

    for(char v='a';!st.isFull()&&v!='z'+1;++v)
    {
        st.push(v);
    }

    while(!st.isEmpty())
        cout<<st.pop()<<" ";
    return 0;
}


下面是 C++連結串列模擬棧/

#include <iostream>
#include <memory.h>

using namespace std;

struct Node
{
    int data;
    struct Node * next;
};

class List
{
public:
    List *createList();
    void insertList(int d);

    void traverseList();

private:
    Node * head;
};

List * List::createList()
{
    head=new Node;
    head->next = NULL;
}

void List::insertList(int d)
{
    Node * cur = new Node;
    cur->data=d;
    cur->next = head->next;
    head->next=cur;

}

void List::traverseList()
{
    Node * ph = head->next;
    while(ph!=NULL)
    {
        cout<<ph->data<<endl;
        ph = ph->next;
    }
}

int main()
{
    List list;
    list.createList();

    for(int i=0;i<10;i++)
    {
        list.insertList(i);
    }

    list.traverseList();
    return 0;
}