您的位置:首页 > 编程语言 > C语言/C++

用链表实现栈C++实现源码

2013-04-19 16:21 197 查看
头文件:

//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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: