算法7---栈及其基本操作实现

有关栈的基本概念随便找一本书上面都有详细的介绍,在这里我用c语言只实现。

这一部分包括一些基本的栈的操作,初始化,出栈,入栈,判空,判满,清空等操作。

  1 #include <Stdlib.h>
  2 #include <stdio.h>
  3 #include <string.h>
  4
  5 #define MAXLEN 50
  6
  7 typedef struct
  8 {
  9     int age;
 10     char name[10];
 11 }DATA;
 12
 13 typedef struct stack
 14 {
 15     DATA data[MAXLEN];
 16     int top;
 17 }stackType;
 18
 19 stackType *inistack()
 20 {
 21     stackType *p;
 22     if (p=(stackType *)malloc(sizeof(stackType )))
 23     {
 24         p->top=0;
 25         return p;
 26     }
 27     return NULL;
 28 }
 29
 30 int stackEmpty(stackType *s)
 31 {
 32     int flag;
 33     flag=(s->top==0);
 34     return flag;
 35 }
 36
 37 int stackFull(stackType *s)
 38 {
 39     int flag;
 40     flag=(s->top==MAXLEN);
 41     return flag;
 42 }
 43
 44 void clearStack(stackType *s)
 45 {
 46     s->top=0;
 47 }
 48
 49 void freeStack(stackType *s)
 50 {
 51     if (s)
 52     {
 53         free(s);
 54     }
 55 }
 56
 57 int pushStack(stackType *s,DATA data)
 58 {
 59     if ((s->top+1)>MAXLEN)
 60     {
 61         printf("overflow!\n");
 62         return 0;
 63     }
 64     s->data[++s->top]=data;
 65     return 1;
 66 }
 67
 68 DATA popStack(stackType *s)
 69 {
 70     if (s->top==0)
 71     {
 72         printf("empty stack!\n");
 73         exit(0);
 74     }
 75     return (s->data[s->top--]);
 76 }
 77
 78
 79 DATA readStack(stackType *s)
 80 {
 81     if (s->top==0)
 82     {
 83         printf("the stack is empty!\n");
 84         exit(0);
 85     }
 86     return (s->data[s->top]);
 87 }
 88
 89 int main()
 90 {
 91     stackType *stack;
 92     DATA data,data1;
 93     stack=inistack();
 94     printf("push stack!\n");
 95     printf("input name,age to push data!\n");
 96     do
 97     {
 98         scanf("%s%d",data.name,&data.age);
 99         if (strcmp(data.name,"0")==0)
100         {
101             break;
102         }
103         else
104         {
105             pushStack(stack,data);
106         }
107     }while(1);
108
109     do
110     {
111         printf("pop stack operation!\n");
112         data1=popStack(stack);
113         printf("the pop stack data is (%s,%d)\n",data1.name,data1.age);
114     }while(1);
115
116
117     freeStack(stack);
118     return 0;
119
120 }
时间: 2024-10-27 18:52:45

算法7---栈及其基本操作实现的相关文章

用JS描述的数据结构及算法表示——栈和队列(基础版)

前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里隐隐歌颂大神的厉害,然后别人的厉害不是我的,所以到底看得各种受打击+头昏脑涨,写这个系列是希望自己能够总结学到东一块.西一下的知识,因为水平有限+经验不足,所以在此只说最基础的思想,附上我自己的算法实现(肯定还有更优解),如果要想看进阶版的,可以在园里搜“数据结构”,各种语言实现和进阶提升的文章有很

数据结构与算法之栈

前言:我也是即学即写的,难免有错误.欢迎之处这篇博文的不足之处. 一.什么是栈? 栈是数据结构的一种,他的原理就是后进先出(先进后出是一样的道理),如图(无图言屌) 看到没,你如果把栈当成一个开口向上的容器的话,你最先存储的a1要想取出来,必须把上面的元素都取出来,而你最后一个存储的a5元素却可以第一个取出来.这就是后进先出. PS:我这里的top是指向栈顶元素的,这里用到的top初值是-1.有的书中(好像是严蔚敏的)的top的初始值是0.所以top指向栈顶元素的上一个存储单元.我个人觉得还是t

java数据结构与算法之栈(Stack)设计与实现

[版权申明]转载请注明出处(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/53362993 出自[zejian的博客] 关联文章: java数据结构与算法之顺序表与链表设计与实现分析 java数据结构与算法之双链表设计与实现 java数据结构与算法之改良顺序表与双链表类似ArrayList和LinkedList(带Iterator迭代器与fast-fail机制) java数据结构与算法之栈设计与实现 ??本篇是jav

Java数据结构和算法之栈与队列

二.栈与队列 1.栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶(Top),另一端称为栈底(Bottom). (2)当表中没有元素时称为空栈. (3)栈为后进先出(Last In First Out)的线性表,简称为LIFO表. 栈的修改是按后进先出的原则进行. 每次删除(退栈)的总是当前栈中"最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部,要到最后才能删除. 图1 [示例]元素是以a1,a2,-,a

3_顺序栈的基本操作

/****date:2014.12.08*****/ /***顺序栈的基本操作***/ /*** Last in First out ( LIFO ) ***/ 顺序栈:使用地址连续的内存单元依次保存栈中的数据,可以定义一个指定大小的结构数组来作为栈:栈底元素序号为0,栈顶元素序号为Top: 栈内元素遵循"后进先出"(LIFO)原则:只能在栈的一端进行操作,即在栈顶位置对栈内元素进行操作. 刚明白的道理:getchar() 对于 键盘的所有操作都算在内,敲击  回车键  也算一个输入信

【数据结构】用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等)

//[数据结构]用C++编写栈及基本操作(包括入栈,出栈,获得栈顶,摧毁,清空等等) //头文件 #ifndef _SEQ_STACK_ #define _SEQ_STACK_ #include <iostream> using namespace std; template <class Type> class SeqStack { public: SeqStack(size_t sz=INIT_SIZE) { capacity = sz > INIT_SIZE ? sz

链栈的基本操作

链栈的基本操作实现代码如下: #include<iostream> using namespace std; #define TRUE 1 #define FALSE 0 //链栈的结构 typedef struct node { int data; struct node *next; }LinkStackNode; typedef LinkStackNode *LinkStack; //链栈进栈 int Push(LinkStack top, int x)//将数据元素x压入栈top中 {

数据结构与算法01--堆栈 &amp; 队列

基于顺序表的堆栈 基于链式表的堆栈 1 基于顺序表的堆栈 栈是一种特殊的线性表,是限定在线性表表尾进行插入删除操作的线性表.由栈的概念衍生出几个子概念,它们是: 1)栈顶,即允许进行插入.删除操作的一端,又称为表尾,用栈顶指针(top)来指示栈顶元素. 2)栈底,即固定端,又称为表头 3)空栈,即栈当中没有数据元素. 顺序栈是采用顺序存储结构的栈,即使用一组连续的存储单元(一般使用数组)来模拟栈,依次存放栈中的数据元素. 1.1 方案 顺序栈的基本操作包括: 1) 初始化操作,在初始化操作中将建

栈的基本操作( too simple)

栈的基本操作: 1,存储结构: 2,创建空战: 3,获取栈顶元素:(判空) 4,插入和删除: 5,销毁栈: # define stack_init_size 100 # define stackincrement 10 typedef int SElemType; typedef struct { SElemType *base; SElemType *top; int stacksize; }SqStack; void DestoryStack(SqStack &S) { S.top=S.ba

栈的基本操作—出栈与入栈

#include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配栈的长度 #define ADD_LEN 10 //栈长增量 typedef struct {//构造栈的数据类型 int *base; int *top; int stacksize; }SqStack; void CreateStack(SqStack &S);//初始化一个栈 void PushStack(SqStack &S,int e