您的位置:首页 > 其它

链表栈的基本操作

2015-05-07 23:32 204 查看
#ifndef _STACKLIST_H
#define _STACKLIST_H

#include<iostream>
#include<assert.h>
using namespace std;

#define ElemType int

typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*PNode;

typedef struct Stack
{
PNode top;
PNode rear;
size_t size;
}Stack;

int StackEmpty(Stack *st);
void InitList(Stack *st);//初始化
bool push(Stack *st,ElemType x);//尾插
bool pop(Stack *st);//头删
void ShowStack(Stack *st);//打印
void clear(Stack *st);//清除
void destroy(Stack *st);//摧毁
int length(Stack *st);//长度
ElemType GetTop(Stack *st);//栈顶元素

#endif

#include "StackList.h"

int StackEmpty(Stack *st)
{
if(st->size == 0)
{
return 1;
}
return 0;
}

void InitList(Stack *list)//初始化
{
Node* s = (Node*)malloc(sizeof(Node));
assert(s != NULL);
s->next = NULL;
list->rear = list->top = s;
list->size = 0;
}

bool push(Stack *st, ElemType x)//尾插
{
Node *p = (Node*)malloc(sizeof(Node));
assert(p != NULL);
p->data = x;
p->next = st->top->next;
st->top->next = p;
st->size++;
return true;
}

void ShowStack(Stack *st)//打印
{
Node *p = st->top->next ;
cout<<"NULL"<<endl;
while(p != NULL)
{
cout<<p->data <<endl;
p = p->next ;
}
}

bool pop(Stack *st)//头删
{
if(StackEmpty(st))
{
cout<<"栈已空,不能出栈!"<<endl;
return false;
}
Node *p = st->top->next;
if(st->size == 1)
{
free(p);
st->top->next = NULL;
}
else

{
st->top->next = p->next ;
free(p);
}
st->size--;
return true;
}

ElemType GetTop(Stack *st)//栈顶元素
{
if(StackEmpty(st))
{

printf("栈已空,没有栈顶元素!\n");
return -1;
}
return st->top->next->data;
}
void clear(Stack *st)//清除
{
Node *p = st->top->next;
while(p != NULL)
{
st->top->next = p->next;
free(p);
p = st->top->next;
}
st->rear  = st->top ;
st->size  = 0;
}

void destroy(Stack *st)//摧毁
{
clear(st);
free(st->top);
st->top = st->rear = NULL;
}

int length(Stack *st)//长度
{
return st->size ;
}

#include "StackList.h"

void main()
{
Stack myStack;
InitList(&myStack);
int select = 1;
ElemType item;
ElemType pos;
Node *p = NULL;
while(select)
{
cout<<"*************************************"<<endl;
cout<<"* [0] quit_system   [1] push        *"<<endl;
cout<<"* [2] show_seqStack [3] pop         *"<<endl;
cout<<"* [4] clear         [5] destroy     *"<<endl;
cout<<"* [6] length        [7] getTop      *"<<endl;
cout<<"*************************************"<<endl;
cout<<"请选择:>";
cin>>select;
switch(select)
{
case 1:
cout<<"请输入要插入的数据(-1结束):>";
while(cin>>item,item!=-1)
{
push(&myStack,item);
}
break;
case 2:
ShowStack(&myStack);
break;
case 3:
pop(&myStack);
break;
case 4:
clear(&myStack);
break;
case 5:
destroy(&myStack);
break;
case 6:
cout<<"栈空间为:"<<length(&myStack)<<endl;
break;
case 7:
cout<<"栈顶元素为:"<<GetTop(&myStack)<<endl;
break;
default:
break;
}
}
destroy(&myStack);
}
<img src="http://img.blog.csdn.net/20150507233301539?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpY2hhbmp1YW4z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
<img src="http://img.blog.csdn.net/20150507233319744?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpY2hhbmp1YW4z/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: