栈操作

来源:互联网 发布:sql 修改 primary key 编辑:程序博客网 时间:2024/06/09 03:10

程序代码:

#include"stdio.h"#include"stdlib.h"#include<iostream>using namespace std;#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{//定义一个栈    int*base;    int*top;    int stacksize;}sqstack;void initstack(sqstack *s)//初始化一个空栈{    s->base = (int*)malloc(STACK_INIT_SIZE*sizeof(int));//栈底指向内存的开始    if (!s->base)        return;    s->top = s->base;//栈顶和栈底相同时,栈的容量为0    s->stacksize = STACK_INIT_SIZE;//栈的最大容量}void pushelem(sqstack*s, int item)//元素入栈{    if (s->top - s->base >= s->stacksize)//当栈满时,重新扩展栈容量    {        s->base = (int*)realloc(s->base, (STACK_INIT_SIZE + STACKINCREMENT)*sizeof(int));        if (!s->base)            return;        s->top = s->base + s->stacksize;//注意要对栈顶指针进行修改        s->stacksize = STACK_INIT_SIZE + STACKINCREMENT;    }    *(s->top) = item;    s->top++;}void popelem(sqstack*s,int*e)//元素出栈{    if (s->top == s->base)//如果栈为空,返回        return;    s->top--;//栈顶指针减一,这里一定是先将top指针减一然后再弹出    *e = *(s->top);//将弹出的元素赋值给e指向的指针}void clearstack(sqstack*s)//清空一个栈{    s->top = s->base;}void destroystack(sqstack*s)//销毁一个栈{    free(s->base);    s->base = s->top = NULL;    s->stacksize = 0;}int stacklen(sqstack *s){    return(s->top - s->base);}int main(){    sqstack s;    initstack(&s);    for (int i = 0; i < 5; i++)        pushelem(&s, i);    for (int i = 0; i < 5; i++)    {        int e;        popelem(&s, &e);        cout << e << " ";    }    system("pause");    return 0;}

程序结果:
这里写图片描述

0 0
原创粉丝点击