数据结构之栈的push与pop操作(顺序存储结构的c实现)

来源:互联网 发布:游戏超人软件 编辑:程序博客网 时间:2024/04/25 07:48

栈( stack )是限定仅在表尾进行插入和删除操作的线性表。

#include <stdio.h>#include <stdlib.h>//栈的顺序存储结构,用一维数组实现#define OK 1#define ERROR -1#define TRUE 1#define FALSE 0#define MAXSIZE 10typedef int Status;typedef int ElemType;typedef struct {    ElemType data[MAXSIZE];    int top;//栈顶指针}Stack;//1. 初始化Status InitStack(Stack *S){    int i;    for(i=0;i<MAXSIZE;i++)    S->data[i]=NULL;    S->top=-1;    return OK;}//2. 创建一个长度为n的堆栈Status CreateStack(Stack *S,int n){    if(n>MAXSIZE || n<1){        printf("输入长度有误!\n");        return ERROR;    }    srand(time(0));    int i;    for(i=0;i<n;i++){        S->data[i]=rand()%100+1;    }    S->top=n-1;    return OK;}//3. 压栈操作Status push(Stack *S,ElemType e){    if(MAXSIZE-1==S->top){        printf("栈已满\n");        return ERROR;    }    //栈顶指向的元素有值    ++(S->top);    S->data[S->top]=e;    return OK;}//4. 出栈Status pop(Stack *S,ElemType *e){//将栈顶元素出栈,传给e    if(-1==S->top){        printf("栈为空!\n");        return ERROR;    }    *e=S->data[S->top];    --(S->top);    return OK;}int main(){    Stack S;    int i,n,e;    if(OK!=InitStack(&S)){        printf("初始化失败!");        return ERROR;    }    printf("输入初始化栈的长度n=");    scanf("%d",&n);    if(OK==CreateStack(&S,n)){            for(i=0;i<=S.top;i++){                printf("%d\t",S.data[i]);            }    }    printf("\n输入想要插入栈的值");    while(1==scanf("%d",&e)){        if(ERROR==push(&S,e)){            break;        }else{            for(i=0;i<=S.top;i++)                 printf("%d\t",S.data[i]);        }    }    printf("\n接下来测试出栈!栈中的元素依次出栈\n");    while(OK==pop(&S,&e)){        getchar();        printf("%d\t",e);    }    return 0;}


0 0