数据结构之顺序栈的实现

10人阅读 评论(0) 收藏 举报
分类:

我们知道栈可以完成的基本操作是入栈,出栈,取栈顶元素,可以由顺序表形式实现,也可以由链表形式实现
今天我们就来实现一下顺序栈
首先来看下顺序栈的实现

seqstack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stddef.h>
#define HEADER printf("\n===============%s==============\n",__FUNCTION__);
typedef char seqstacktype;
typedef struct seqstack{
seqstacktype *data;
size_t capacity;//我们可以自行设置存储的容量,动态
size_t size;
}seqstack;
seqstack seq;
void seqstack_init(seqstack *seq);
void seqstack_print(seqstack *seq);
void seqstack_destory(seqstack *seq);
void seqstack_push(seqstack *seq,seqstacktype value);
void seqstack_pop(seqstack *seq)
int seqstack_gettop(seqstack *seq,seqstacktype value);

写完头文件之后就开始我们的函数

#include "seqstack.h"
void seqstack_init(seqstack *seq);
{
    if(seq == NULL)
    {
        return;
    }
    seq->size = 0;
    seq->capacity = 1000;
    seq->data = (seqstacktype*)malloc(seq->capacity*sizeof(seqstacktype));
    retyrn;
}
void seqstack_print(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size == 0)
    {
        return;
    }
    int i = 0;
    for(;i<seq->size;i++)
    {
        printf("[%c] ",seq->data[i]);
    }
    printf("\n");
}
void seqstack_resize(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    seqstacktype *newdata = (seqstacktype *)malloc(seq->capacity*sizeof(seqstacktype)*2+1);
    int i = 0;
    for(;i<seq->size;i++)
    {
        newdata[i] = data[i];
    }
    free(seq->data);
    seq->data = newdata;
    return;
}
void seqstack_push(seqstack *seq,seqstacktype value)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size >= seq->capacity)
    {
        seqstack_resize(seq);
    }
    else
    {
        seq->data[seq->size++] = value;
        return;
    }
}
void seqstack_pop(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    if(seq->size == 0)
    {
        return;
    }
    seq->size--;
}
int seqstack_gettop(seqstack *seq,seqstacktype *value)
{
    if(seq == NULL)
    {
        return 0;
    }
    if(seq->size == 0)
    {
        return 0;
    }
    *value = seq->data[size-1];
    return 1;

}
void seqstack_destroy(seqstack *seq)
{
    if(seq == NULL)
    {
        return;
    }
    seq->size = 0;
    free(seq->data);
    return;
}

下面是测试函数和效果
这里写图片描述这里写图片描述这里写图片描述

查看评论

数据结构之栈的顺序表示及其实现

记录一下自己学习过程中写的代码。以下是我看严蔚敏老师的数据结构教材后,结合教材所讲用C语言实现了关于栈的顺序表示及其实现的基本操作,供以后复习所用。本程序建立的栈是一个顺序栈,即该栈是利用一组地址连续...
  • jsrcdjcyy
  • jsrcdjcyy
  • 2016-08-06 17:21:04
  • 2175

【数据结构】顺序栈的基本操作

顺序栈的基本操作.cpp #include using namespace std; typedef int SElemType; typedef struct {  SElemType *bas...
  • qq_32353771
  • qq_32353771
  • 2015-11-10 14:49:02
  • 732

数据结构顺序栈的基本操作

  • 2010年12月09日 20:11
  • 4KB
  • 下载

数据结构(严蔚敏)之三——顺序栈之c语言实现

实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6...
  • GreenHandCGL
  • GreenHandCGL
  • 2015-04-03 00:07:04
  • 2766

【数据结构】C++实现顺序栈

栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。...
  • yaotengjian
  • yaotengjian
  • 2017-11-18 22:16:13
  • 130

C/C++数据结构通过顺序栈实现括号()匹配算法

#include #include #include #include #include #define OK 1 #define ERROR 0 #define MAXSIZ...
  • li99yangg
  • li99yangg
  • 2017-10-08 20:43:42
  • 468

数据结构练习:用顺序栈实现进制间的转换

/* 用顺序栈实现进制的转换 */ #include #include #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef int SE...
  • Geek_ymv
  • Geek_ymv
  • 2013-05-14 18:07:54
  • 1102

【数据结构】顺序栈的实现(c++)

头文件: #pragma once #include #include using namespace std; template class SeqStack { public:...
  • zhaoyaqian552
  • zhaoyaqian552
  • 2015-05-28 20:50:49
  • 729

数据结构:顺序栈与链栈

栈(stack): 概念:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、...
  • qq_40657299
  • qq_40657299
  • 2017-11-13 15:10:57
  • 78

数据结构——栈—— 顺序栈(附java实现)

堆栈(英语:stack),也可直接称栈。中国大陆作堆栈,台湾作堆叠,在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英语:top)进行...
  • A_lele123
  • A_lele123
  • 2013-12-06 13:51:37
  • 1422
    个人资料
    持之以恒
    等级:
    访问量: 779
    积分: 345
    排名: 21万+
    文章分类
    文章存档
    最新评论