您的位置:首页 > 理论基础 > 数据结构算法

数据结构课程要求算法-栈

2014-10-12 11:51 253 查看
宏定义部分

#define STACK_INIT_SIZE 100   //栈的初始容量
#define STACKINCREMENT 10	  //每次再分配的容量


栈的定义:

typedef struct{
int *base;  //栈底
int *top;	//栈顶
int stacksize;  //当前栈的容量
}SqStack;


建栈

bool InitStack(SqStack &S){
S.base=(int *)malloc(STACK_INIT_SIZE * sizeof(int));	//为栈分配大小为STACK_INIT_SIZE的空间
if(!S.base)return false;								//如果分配空间失败,处理
//exit(OVERFLOW);

S.top=S.base;
S.stacksize=STACK_INIT_SIZE;							//初始时,栈顶指针=栈底指针,栈的容量为STACK_INIT_SIZE
cout<<"Create stack successfully!"<<endl;
return true;
}


入栈

bool Push(SqStack &S,int e){
//对空间进行判断,如果空间超过,进行再分配
if(S.top-S.base >= S.stacksize * sizeof(int) ){
S.base=(int *)realloc(S.base,S.stacksize + STACKINCREMENT * sizeof(int));
if(!S.base)return false;
//exit(OVERFLOW);

//realloc使用后可能会影响栈底base的指针,所以重新寻找栈顶top
S.top=S.base+S.stacksize * sizeof(int);
S.stacksize += STACKINCREMENT;//栈的容量增加
}

//入栈操作
*(S.top)=e;   //将e压入
S.top+=sizeof(int);  //栈顶指针变化

return true;
}


出栈

bool Pop(SqStack &S,int &e){
if(S.top==S.base)
{
cout<<"empty!"<<endl;
return false;
}
S.top-=sizeof(int);
e= *(S.top);
return true;
}


得到栈顶元素

bool GetTop(SqStack S, int &e)
{
if(S.top==S.base)
{
cout<<"empty!"<<endl;
return false;
}
S.top-=sizeof(int);
e = *(S.top);
}


得到栈长
int StackLength(SqStack S){
return (S.top-S.base)/sizeof(int);

}


遍历所有

bool StackTraverse(SqStack S){
if(S.top==S.base)
{
cout<<"empty!"<<endl;
return false;
}
int *temp;
temp=S.base;
while(temp < S.top)
{
//对每一项数据进行的操作 visit();
cout<< *temp<<endl;
temp=temp+sizeof(int);
}
return true;
}


其实,栈和线性表都是通过访问地址得到元素,是常用的数据结构。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: