数据结构实验——基于数组的栈基本操作

来源:互联网 发布:广东话seo是什么意思 编辑:程序博客网 时间:2024/06/10 05:42

实验要求

  1. 实验目的
    1.熟悉并能实现栈的定义和基本操作。
    2.了解和掌握栈在递归和非递归算法的应用。

  2. 实验要求

    1. 进行栈的基本操作时要注意栈“后进先出”的特性。
    2. 编写完整程序完成下面的实验内容并上机运行。
    3. 整理并上交实验报告。
  3. 实验内容

    1. 编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行入栈、出栈以及取栈顶元素操作。写个功能写成一个函数。
    2. 从键盘上输入一串带括号的字符,如果其中的括号是匹配的,则输出“balance”,如果括号不匹配,则输出“not balance”

实验代码实现

结构体声明

typedef struct{    int data[MAXSIZE];    int top;}seqStack;

操作函数声明

// 初始化栈seqStack stackInit();// 将数据push进栈void stackPush(seqStack *s,int data);// pop出栈顶元素int stackPop(seqStack *s);// 获取栈顶元素int getStackTop(seqStack *s);// 判断栈是否为空,为空返回1,反之为0int isEmpty(seqStack *s);// 判断栈是否已经满了,满栈返回1,反之返回0int checkStack(seqStack *s);// 展示栈中的元素void showStack(seqStack *s);

主函数实现

    int main(int argc, char *argv[]){    seqStack s;    s = stackInit();    stackPush(&s,10);    stackPush(&s,20);    stackPush(&s,30);    stackPush(&s,40);    stackPush(&s,50);    showStack(&s);    stackPop(&s);    stackPop(&s);    showStack(&s);    int topData = getStackTop(&s);    printf("栈顶元素为:%d\n",topData);    return 0;}

源代码参考

#include <stdio.h>#define MAXSIZE 10typedef struct{    int data[MAXSIZE];    int top;}seqStack;// 初始化栈seqStack stackInit();// 将数据push进栈void stackPush(seqStack *s,int data);// pop出栈顶元素int stackPop(seqStack *s);// 获取栈顶元素int getStackTop(seqStack *s);// 判断栈是否为空,为空返回1,反之为0int isEmpty(seqStack *s);// 判断栈是否已经满了,满栈返回1,反之返回0int checkStack(seqStack *s);// 展示栈中的元素void showStack(seqStack *s);int main(int argc, char *argv[]){    seqStack s;    s = stackInit();    stackPush(&s,10);    stackPush(&s,20);    stackPush(&s,30);    stackPush(&s,40);    stackPush(&s,50);    showStack(&s);    stackPop(&s);    stackPop(&s);    showStack(&s);    int topData = getStackTop(&s);    printf("栈顶元素为:%d\n",topData);    return 0;}int getStackTop(seqStack *s){    return s->data[s->top];}void showStack(seqStack *s){    if(isEmpty(s) == 0){        int length = s->top;        int i;        printf("栈元素为:\t");        for (i = 0;i<=length ;i++ ){            printf("%d\t",s->data[i]);        }        printf("\n");    }else{        return;    }}void stackPush(seqStack *s,int data){    if(checkStack(s) == 1){        s->top ++;        s->data[s->top] = data;        printf("PUSH数据\t%d\t成功\n",data);    }else{        return;     }}int stackPop(seqStack *s){    int result;    if(isEmpty(s) == 0){        result = s->data[s->top];        s->data[s->top] = 0;        s->top --;        printf("栈POP数据\t%d\t成功\n",result);        return result;    }else{        return 0;    }}int checkStack(seqStack *s){    if(s->top == MAXSIZE - 1){        printf("栈已经满了\n");        return 0;    }    return 1;}seqStack stackInit(){    seqStack s;    s.top = -1;    int length;    printf("请输入所需栈的长度:");    scanf("%d",&length);    int i,temp;    for (i = 0;i<length ;i++ )    {        printf("请输入第%d个数据:",i+1);        scanf("%d",&temp);        stackPush(&s,temp);    }    return s;}int isEmpty(seqStack *s){    if(s->top == -1){        printf("栈为空\n");        return 1;    }    return 0;}

运行结果显示

这里写图片描述

0 0
原创粉丝点击