您的位置:首页 > 其它

顺序栈的基本操作

2017-03-21 09:02 148 查看
2017-3-21 上课写的

#include<stdio.h>
#include<stdlib.h>
#define FIST 100
#define TWO 10

typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack;

//函数定义.......................
int InitStack(SqStack &S);

int StackLength(SqStack S);

int GetTop(SqStack S,int &e);

int Push(SqStack &S,int e);

int Pop(SqStack &S,int &e);

int shownumbers(SqStack S);

//函数实现.........................
int InitStack(SqStack &S)
{
S.base = (int *)malloc(FIST * sizeof(int));
if(!S.base)
exit(-1);
S.top = S.base;
S.stacksize = FIST;
return 1;

}

int StackLength(SqStack S)
{
if(S.top == S.base)
return 0;
return S.stacksize;

}

int GetTop(SqStack S,int &e)
{
if(S.top == S.base)
return 0;
e = *(S.top -1);

return 1;
}

int Push(SqStack &S,int e)
{
if(S.top -S.base >= S.stacksize)
{
S.base = (int *)realloc(S.base,(S.stacksize + FIST)* sizeof(int));
if(!S.base)
exit(-1);
S.top = S.base + S.stacksize;
S.stacksize += FIST;
}
* S.top++ = e;

return 1;
}

int Pop(SqStack &S,int &e)
{
if(S.top == S.base)
return 0;
e = *--S.top;
return 1;
}

int shownumbers(SqStack S)
{
// int i;
S.top--;
// for(i=0;i<n;i++)
// {
while(1)
{
if(S.top < S.base)
{
printf("\n已经到栈底\n");
return 0;
// break;
}
printf("%-4d",*S.top);
S.top--;
}
// }
return 1;
}

//驱动函数............
int main()
{
SqStack S;
int e;
int n;
InitStack(S);
printf("请输入插入元素的个数:\n");
scanf("%d",&n);
printf("请输入插入的元素:\n");
for(int i=0;i<n;i++)
{
scanf("%d",&e);
Push(S,e);
}

shownumbers(S);

printf("\n");
printf("测试GetTOP,返回栈顶元素:\n");
GetTop(S,e);
printf("%d\n",e);

printf("测试删除栈顶元素函数:\n");
Pop(S,e);
printf("删除的栈顶元素是:%d\n",e);

shownumbers(S);

return 0;

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