数据结构之栈的push与pop操作(顺序存储结构的c实现)
2014-05-14 15:26
681 查看
栈( stack )是限定仅在表尾进行插入和删除操作的线性表。
#include <stdio.h> #include <stdlib.h> //栈的顺序存储结构,用一维数组实现 #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE 0 #define MAXSIZE 10 typedef 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; }
相关文章推荐
- 两个栈实现队列Push和Pop操作
- 实现一堆栈,要求三个操作,Pop,Push,GetMaxValue,时间均为O(1)
- 实现一堆栈,要求三个操作,Pop,Push,GetMaxValue,时间均为O(1)
- 10.1-2 说明如何用一个数组A[1..n]来实现两个栈,使得两个栈中的元素总数不到n时,两者都不会发生上溢,注意PUSH和POP操作的时间应为O(1)。
- 编写一个类,实现简单的栈操作。数据的操作按先进后出的顺序。成员函数为pop; push; size; full; empty; print等等
- 实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(返回最小值的操作)的时间复杂度为O(1)
- 实现一个 能在O(1)时间复杂度 完成 Push、Pop、Min操作的 栈
- java 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 实现一个栈,使push,pop,min操作只需要o(1)时间
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 常用数据结构2——栈,实现PUSH、POP和取最小值操作算法时间复杂度为o(1)
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
- 实现一个栈,要求push,pop,Min的操作时间复杂度为O(1)
- 每天一算法(二)实现栈的push pop 操作,并可以输出栈的最小值
- 两个栈实现队列的pop与push操作
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。
- 实现一个栈(元素遵守先入后出顺序),能够通过 min 方法在 O(1)时间内获取栈中的最小元素。同时,栈的基本操作:入栈(Push)、出栈(Pop),也是在O(1)时间内完成的
- 用一个单链表L实现一个栈 要求PUSH和POP操作的时间仍为O(1) 算法导论10.2-2答案
- 用两个栈来实现一个队列,完成队列的Push和Pop操作