码迷,mamicode.com
首页 > 其他好文 > 详细

栈的表示和实现

时间:2019-03-29 19:11:48      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:printf   null   --   图片   oid   line   nod   static   next   

栈是仅能在表尾(栈顶)进行插入或删除操作的  线性表 后进后出

基本操作: 初始化,判断是否为空栈,取栈顶元素,插入新的栈顶元素。

非空栈中栈顶指针始终在栈顶元素的下一个位置

 

技术图片

分为顺序栈:

#include<stdio.h>
#include<stdlib.h>
typedef struct{
   int *base;
   int *top;
   int stacksize;
}sqstack;

void  initial(sqstack &s){
   s.base=(int *)malloc(10*sizeof(int));
   if(s.base==0)  exit(0);
   s.top =s.base;
   s.stacksize=10;

}
void push(sqstack &s){
  int n,i=0;
  scanf("%d",&n);
  do{
    scanf("%d",s.top++);
    i++;
  }while(i<n);

}
void pop(sqstack &s,int &e){
    if(s.top==s.base)  exit(0);
    e=*--s.top;
}
main(){
   sqstack s;
   int e;
   initial(s);
   push(s);
   while(s.top-s.base>0){  //判断是否为空栈
   pop(s,e);
   printf("%d",e);}
}

链栈:

#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
  int data;
  struct Lnode *next;
}Lnode, *Linkstack;          // 链栈的结点定义和单链表一样,只不过它只能在栈顶操作
void initial(Linkstack s){
  s=NULL;
}
void push(Linkstack &s, int e){
Linkstack p;
   p=(Linkstack)malloc(sizeof(Lnode));
   p->data = e;
   p->next =s;
   s=p;
}
void pop(Linkstack &s,int &e){
   Linkstack p;
    if(s->next==NULL)  exit(0);
     p=s;
    e=p->data;
    s=s->next;
    free(p);
}
main(){
  int e,n,i;
  Linkstack s;
  initial(s);
  scanf("%d",&n);
  while(n--){
  scanf("%d",&i);
  push(s,i);}
  while(s->next!=NULL){
    pop(s,e);
    printf("%d",e);
  }
  printf("\n");
}

     链栈最后运行是有一个bug

栈的表示和实现

标签:printf   null   --   图片   oid   line   nod   static   next   

原文地址:https://www.cnblogs.com/xiaoqiz/p/10623089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!