栈
一、栈的基本概念
二、顺序栈
#include <stdio.h>
#include <iostream>
using namespace std;
#define MaxSize 50
typedef struct{
int data[MaxSize];
int top;
} Stack;
void init_data(Stack &S){
S.top = -1;
}
bool is_stack_empty(Stack S){
if (S.top == -1) {
return true;
}else
return false;
}
bool set_data(Stack &S, int value){
S.data[++S.top] = value;
return true;
}
bool get_data(Stack &S, int &value){
value = S.data[S.top];
return true;
}
bool erase_data(Stack &S, int &value){
bool Flag;
Flag = is_stack_empty(S);
if (Flag) {
return false;
}
value = S.data[S.top--];
return true;
}
void print_data(Stack S){
while (S.top>=0) {
cout << "element:" << S.top << " " << S.data[S.top--] << endl;
}
}
int main(){
std::cout << "welcome, to my world!" << std::endl;
Stack S;
init_data(S);
cout << "size of:" << sizeof(S) << endl;
set_data(S, 1);
set_data(S, 2);
set_data(S, 3);
set_data(S, 4);
print_data(S);
int value;
erase_data(S, value);
print_data(S);
return 0;
}
三、链栈
#include <stdio.h>
#include <iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode, *Stack;
void init_data(Stack &S){
S = (LinkNode *)malloc(sizeof(LinkNode));
S->data = 999;
S->next = NULL;
}
bool set_data(Stack &S, int value){
LinkNode *p = S;
if (p == NULL) {
return false;
}
LinkNode *q = (LinkNode *)malloc(sizeof(LinkNode));
q->data = value;
q->next = p->next;
p->next = q;
return true;
}
int get_data(Stack S){
if (S->next==NULL) {
return false;
}
return S->next->data;
}
bool erase_data(Stack &S, int &value){
if (S->next==NULL) {
return false;
}
LinkNode *p = S->next;
S->next = p->next;
value = p->data;
free(p);
return true;
}
void print_data(Stack S){
LinkNode *p = S->next;
if (p == NULL) {
return ;
}
while (p!=NULL) {
cout << "element:" << p->data << endl;
p = p->next;
}
}
int main(){
std::cout << "welcome, to my world!" << std::endl;
Stack S;
init_data(S);
cout << "size of:" << sizeof(S) << endl;
set_data(S, 1111);
set_data(S, 1112);
set_data(S, 1113);
set_data(S, 1114);
set_data(S, 1115);
set_data(S, 1116);
print_data(S);
int value = 0;
erase_data(S, value);
print_data(S);
return 0;
}