1、数据结构-栈的实现-C语言
#define MAXSIZE 100
//栈的存储结构
typedef struct
{
int* base; //栈底指针
int* top; //栈顶指针
int stacksize; //最大容量
} SqStack;
//栈初始化---1
void InitStack(SqStack* S);
//栈的销毁---2
void DestroyStack(SqStack* S);
//栈的清空---3
void ClearStack(SqStack* S);
//判断栈是否为空---4
void StackEmpty(SqStack S);
//栈的长度---5
int StackLength(SqStack S);
//取栈顶元素---6
void GetTop(SqStack S);
//入栈操作---7
void Push(SqStack* S, int value);
//出栈操作---8
void Pop(SqStack* S,int* value);
//依次访问栈元素---9
void StackTraverse(SqStack S);
void ShowHelp();
//-----------------------------------------------
void ShowHelp()
{
printf("1---初始化栈\n");
printf("2---销毁栈\n");
printf("3---清空栈\n");
printf("4---判断栈是否为空\n");
printf("5---栈的长度\n");
printf("6---取栈顶元素\n");
printf("7---入栈操作\n");
printf("8---出栈操作\n");
printf("9---依次访问栈元素\n");
}
void InitStack(SqStack* S)
{
S->base = (SqStack*) malloc(MAXSIZE*sizeof(SqStack));
if(!S->base)
{
printf("分配失败.\n");
return;
}
S->top = S->base; //初始时候相等
S->stacksize = MAXSIZE; //设置最大容量
}
void DestroyStack(SqStack* S)
{
free(S->base); //释放基地址
S->top = NULL;
S->base = NULL;
}
void ClearStack(SqStack* S)
{
S->top = S->base;
}
void StackEmpty(SqStack S)
{
if(S.top == S.base)
printf("此栈为空栈。\n");
else
printf("此栈不为空栈。\n");
}
int StackLength(SqStack S)
{
return S.top - S.base;
}
void GetTop(SqStack S)
{
if(S.top == S.base)
{
printf("此栈为空。\n");
return;
}
printf("此栈顶元素为%d。\n",*(S.top-1));
}
void Push(SqStack* S, int value)
{
if(S->top-S->base == MAXSIZE)
{
printf("栈中元素已满,不能再继续添加.\n");
return;
}
*(S->top) = value;
S->top++;
printf("-入栈成功\n");
}
void Pop(SqStack* S,int* value)
{
if(S->top == S->base)
{
printf("栈中无元素,不能再进行出栈操作.\n");
return;
}
*value = *((S->top)-1);
S->top--;
printf("出栈成功\n");
}
void StackTraverse(SqStack S)
{
if(S.base == S.top){
printf("此栈为空。\n");
return;
}
int* start = S.base;
int num = 1;
while(start != S.top)
{
printf("元素%d的值为:%d\n",num,*start);
num++;
start++;
}
}