C语言实现顺序栈
2017-12-13 10:20
204 查看
栈和队列实际上都是加上了一些限制的线性表,所以实现起来比线性表容易。
#include <stdio.h>
#include <stdlib.h>
typedef enum {true, false} bool;
typedef struct AStack{
int *data;
int top;
int len;
}aStack, *paStack;
//函数声明
void init_stack(paStack pas, int len); //初始化一个栈
bool is_empty(paStack pas); //判断栈是否位空
bool is_full(paStack pas); //判断栈是否满
bool push(paStack pas, int val); //压栈
void traverse(paStack pas); //遍历栈
bool pop(paStack pas, int *pVal); //出栈
void clear_stack(paStack pas); //清空栈内所有元素
int main(int argc, const char * argv[]) {
// insert code here...
aStack pas;
int val;
init_stack(&pas, 6);
push(&pas, 1);
push(&pas, 2);
push(&pas, 3);
push(&pas, 4);
push(&pas, 5);
push(&pas, 6);
traverse(&pas);
if ( pop(&pas, &val) == true )
{
printf("删除成功,删除的值为:%d\n", val);
}
else
{
printf("删除失败!\n");
}
traverse(&pas);
clear_stack(&pas);
traverse(&pas);
return 0;
}
void init_stack(paStack pas, int len){
pas->data = (int *)malloc(sizeof(int)*len);
if (pas->data == NULL) {
printf("内存分配失败\n");
exit(-1);
}else{
pas->len = len;
pas->top = -1;
}
return;
}
bool is_empty(paStack pas){
if (pas->top < 0) {
return true;
}else{
return false;
}
}
bool is_full(paStack pas){
if (pas->top >= pas->len) {
return true;
}else{
return false;
}
}
bool push(paStack pas, int val){
if (is_full(pas) == true) {
return false;
}else{
pas->top++;
pas->data[pas->top] = val;
return true;
}
}
void traverse(paStack pas){
int i, n;
n = pas->top;
for (i=n; i>=0; i--) {
printf("%d ", pas->data[i]);
}
printf("\n");
return;
}
bool pop(paStack pas, int *pVal){
if (is_empty(pas) == true) {
return false;
}else{
*pVal = pas->data[pas->top];
pas->top--;
return true;
}
}
void clear_stack(paStack pas){
if (is_empty(pas) == true){
printf("顺序栈为空!\n");
exit(-1);
}else{
pas->top = -1;
printf("顺序栈已置为空!\n");
}
return;
}
#include <stdio.h>
#include <stdlib.h>
typedef enum {true, false} bool;
typedef struct AStack{
int *data;
int top;
int len;
}aStack, *paStack;
//函数声明
void init_stack(paStack pas, int len); //初始化一个栈
bool is_empty(paStack pas); //判断栈是否位空
bool is_full(paStack pas); //判断栈是否满
bool push(paStack pas, int val); //压栈
void traverse(paStack pas); //遍历栈
bool pop(paStack pas, int *pVal); //出栈
void clear_stack(paStack pas); //清空栈内所有元素
int main(int argc, const char * argv[]) {
// insert code here...
aStack pas;
int val;
init_stack(&pas, 6);
push(&pas, 1);
push(&pas, 2);
push(&pas, 3);
push(&pas, 4);
push(&pas, 5);
push(&pas, 6);
traverse(&pas);
if ( pop(&pas, &val) == true )
{
printf("删除成功,删除的值为:%d\n", val);
}
else
{
printf("删除失败!\n");
}
traverse(&pas);
clear_stack(&pas);
traverse(&pas);
return 0;
}
void init_stack(paStack pas, int len){
pas->data = (int *)malloc(sizeof(int)*len);
if (pas->data == NULL) {
printf("内存分配失败\n");
exit(-1);
}else{
pas->len = len;
pas->top = -1;
}
return;
}
bool is_empty(paStack pas){
if (pas->top < 0) {
return true;
}else{
return false;
}
}
bool is_full(paStack pas){
if (pas->top >= pas->len) {
return true;
}else{
return false;
}
}
bool push(paStack pas, int val){
if (is_full(pas) == true) {
return false;
}else{
pas->top++;
pas->data[pas->top] = val;
return true;
}
}
void traverse(paStack pas){
int i, n;
n = pas->top;
for (i=n; i>=0; i--) {
printf("%d ", pas->data[i]);
}
printf("\n");
return;
}
bool pop(paStack pas, int *pVal){
if (is_empty(pas) == true) {
return false;
}else{
*pVal = pas->data[pas->top];
pas->top--;
return true;
}
}
void clear_stack(paStack pas){
if (is_empty(pas) == true){
printf("顺序栈为空!\n");
exit(-1);
}else{
pas->top = -1;
printf("顺序栈已置为空!\n");
}
return;
}
相关文章推荐
- c语言:利用指针变量,用函数实现将3个整数按从大到小的顺序输出
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- 串的定长顺序存储C语言实现
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- 线性表——顺序结构(c语言实现)
- C语言顺序表的实现
- C语言实现顺序表
- C语言 顺序表的实现 (动态)
- 动态顺序表-c语言实现
- c语言实现静态顺序表
- 顺序线性表——通过存放地址,实现顺序存储--C语言简单实现
- 动态分配的顺序线性表的十五种操作—C语言实现
- (C语言队列的顺序实现(数据结构十)
- C语言是实现顺序表(非动态)
- C语言实现顺序存储(数组)
- 顺序栈 C语言实现
- c语言实现顺序二叉树的非递归的三种遍历算法
- 一、数据结构基础之顺序表C语言实现
- C语言实现顺序表
- C语言 串 顺序结构 实现