【数据结构】栈的基本操作

来源:互联网 发布:java final 变量 编辑:程序博客网 时间:2024/05/18 01:17

#include "stdafx.h"

#include<stdio.h>

#include<stdlib.h>

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef int SElemType;

typedef struct{

    SElemType *base;

    SElemType *top;

    intstacklen;

}SqStack;

 

//建立空栈

int InitStack(SqStack &S,intn){

    S.base=(SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));

    if(!S.base)exit(OVERFLOW);

    S.top=S.base;

    S.stacklen=n;

    returnOK;

}

 

//输出栈

int printstack(SqStack &S,intn)

{

    int*p;

    printf("当前的栈为:\n");

       printf("---------------------------------------------------------\n");

       for(p=S.base;p<S.base+S.stacklen;p++)

           printf("%d ",*p);

       printf("\n");

        printf("---------------------------------------------------------\n");

    returnOK;

}

 

//给栈充入元素

int NewStack(SqStack &S,intn){

    inti;

    printf("请输入%d个整数:\n",n);

    for(i=1;i<=S.stacklen;i++)

    {scanf("%d",S.top);

     S.top++;

    }

    printstack(S,S.stacklen);

    printf("\n");

    returnOK;

}

 

//删除元素

int Pop(SqStack &S){

    --S.top;

    --S.stacklen;

    printstack(S,S.stacklen);

    returnOK;

}

 

//返回栈顶元素

int GetTop(SqStack &S){

    printf("栈顶元素为:%d\n",*(S.top-1));

    returnOK;

}

 

//插入元素

int Push(SqStack &S){

    printf("请输入新的栈顶元素:\n");

    scanf("%d",S.top);

    S.top++;

    S.stacklen++;

    printstack(S,S.stacklen);

    printf("\n");

    returnOK;

}

 

//查找元素

int Seek(SqStack &S,int x)

{

    inti;

    int*p;

    for(p=S.base,i=1;p<S.base+S.stacklen,i<=S.stacklen;p++,i++)

       if(*p==x)

           printf("这是第%d个元素\n",i);

    returnOK;

}

 

 

void main(){

    intn;

    SqStack S;

    printf("请输入要充入栈的元素个数:\n");

    scanf("%d",&n);

    InitStack(S,n);

    NewStack(S,n);

    printf("========================菜单=======================\n");

    printf("=                   1.插入元素                   =\n");

    printf("=                   2.删除元素                   =\n");

    printf("=                   3.返回栈顶元素               =\n");

    printf("=                   4.查找栈元素                 =\n");

    printf("=                   5.退出操作                   =\n");

    printf("====================支持乱序选择===================\n");

    intselect,flag=1;

    while(flag){

         printf("\n请按照菜单选择操作选项:\n");

         scanf("%d",&select);

    switch(select)

    {

    case1:Push(S);break;

    case2:Pop(S);break;

    case3:GetTop(S);break;

    case4:printf("请输入要查找的元素:\n");

        scanf("%d",&n);

        Seek(S,n);break;

    case5:flag=0;break;

    default:printf("enter data error!\n");

    }

    }

   

}

 

 

0 0