数据结构之C语言实现栈

C语言实现栈

利用数组实现简单的栈操作:

  • 入栈
  • 出栈
  • 栈空
  • 取栈顶元素
/****************************************************************************************************** 
 *   function:用数组实现栈,并完成一些栈的常规操作:入栈、出栈等操作 
 *   author:yahai.zhang 
 *   time: 2018.7.15
 *   File Name:MyStack.c
 ******************************************************************************************************/ 

#include<stdio.h>
#include <string.h>

#define STACK_MAX_LEN 100

/* 栈内存放的数据 */ 
struct DATA{
    int age;
    char name[20];
};

/* 实现顺序栈,使用数组来实现 */
struct MyStack
{
    struct DATA data[STACK_MAX_LEN];
    int top; 
};

/* 初始化栈 */
void init(struct MyStack *s)
{
    s->top=-1;
}

/* 判断栈是否为空 */
int isEmpty(struct MyStack *s)
{
    if(s->top==-1)
        return 1;
    else
        return 0;
}

/* 判断栈是否已满了 */
int isFull(struct MyStack *s)
{
    if(s->top==STACK_MAX_LEN-1)
        return 1;
    else
        return 0;
}

/* 入栈 */
void Push(struct MyStack *s,struct DATA element)
{
    if(!isFull(s)) {
        s->top++;
        memcpy(&s->data[s->top], &element, sizeof(struct DATA));
    } else {
        printf("栈满\n");
    }
}

/* 出栈 */
void Pop(struct MyStack *s)
{
    if(!isEmpty(s)) {
        s->top--;
    } else {
        printf("栈空\n");
    }
}

/* 取栈顶元素 */
struct DATA Top(struct MyStack *s)
{
    if(!isEmpty(s)) {
        return s->data[s->top];
    } else {
        printf("栈空\n");
    }
}

/* 销毁栈 */
void Destroy(struct MyStack *s)
{
    s->top=-1;
}

/* 打印栈内容 */
d_printf(struct MyStack *st)
{
    int i = 0;
    printf("=================================================\n");
    printf("打印栈\n");
    for(i; i <= st->top; i++) {
        printf("element[%d]--->name:%s, age:%d\n", i, st->data[i].name, st->data[i].age);
    }
    printf("=================================================\n");
}

int main()
{
    struct MyStack st;
    init(&st);
    printf("该栈存放的是个人的姓名及年龄信息...\n");
    int n = 0, i=1; 
    printf("入栈n个人员的信息: n="); 
    scanf("%d", &n);
    while(n--) {
        printf("请输入第%d个人员的信息:", i++); 
        struct DATA da;
        scanf("%s %d", &da.name, &da.age);
        Push(&st, da);
    }
    d_printf(&st);

    printf("弹栈操作1次\n"); 
    Pop(&st);
    d_printf(&st);
    return 0;
}

运行结果如下图所示:

实验目标

图1 运行结果

猜你喜欢

转载自blog.csdn.net/sky619351517/article/details/80961461