头文件:
//Stack.h
struct node;
typedef struct node *Stack;
Stack CreateStack();
void Push( int, Stack );
void PrintStack( Stack );
void Pop(Stack);
int StackLength( Stack );
源文件:
//Stack.cpp
#include "Stack.h"
#include <iostream>
using namespace std;
struct node{
int data;
node *next;
};
Stack CreateStack()
{
Stack S;
S = (node *)malloc(sizeof(node));
if( S == NULL )
cout<<"内存分配失败!"<<endl;
S->next = NULL;
return S;
}
void Push( int x, Stack S )
{
node *tmp;
tmp = (node *)malloc(sizeof(node));
if( tmp == NULL )
cout << "内存分配失败!"<<endl;
else{
tmp->data = x;
tmp->next = S->next;
S->next = tmp;
}
}
void Pop(Stack S)
{
node *top;
if( S->next == NULL )
cout << "Pop失败:空栈!"<<endl;
else{
top = S->next;
S->next = S->next->next;
free(top);
}
}
int StackLength( Stack S)
{
int n = 0;
while( S->next != NULL )
{
S = S->next;
n++;
}
return n;
}
void PrintStack(Stack S)
{
cout << "Stack: " << endl;
S = S->next; //第一个S,S为空
while( S != NULL )
{
//cout << "S!=NULL"<<endl;
cout << S->data ;
S = S->next;
}
cout << endl;
}
测试文件:
//main.cpp
#include "Stack.h"
#include <iostream>
using namespace std;
void main()
{
int n;
int x;
Stack S = CreateStack();
cout << "输入n:";
cin >> n;
while( n-- )
{
cout <<" 输入数字:";
cin >> x;
Push( x, S);
}
PrintStack(S);
int m;
cout << "输入Pop个数m:";
cin >> m;
while(m--)
{
Pop(S);
}
PrintStack(S);
cout << "栈的长度:" << StackLength(S) << endl;
PrintStack(S);
system("PAUSE");
}