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

数据结构之第三章之栈

时间:2016-10-05 19:56:55      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

      栈和队列其实就是操作受限的队列。

1~~栈的特点:栈是限定仅在表的另一端(栈顶)进行插入,删除操作的线性表,是后进先出的线性表。

2~~顺序栈

    (1)顺序栈的存储表示

typedef struct Node{
      struct Node *base;//栈底指针,在栈构造之前和销毁之后,base的值为NULL
      struct Node *top;//这个是栈定指针,用以压栈的位置。
      int size;//当前已分配的存储单元数,以元素为单位  
}NODE,*PNODE;

           (2) 压栈操作

 

int push(PNODE head,int e){
//插入元素为e的新的栈顶元素
        if(head.top-head.base>=head.size)//栈满,追加存储空间
{ head.
base=(PNODE)malloc(sizeof(NODE)); if(head.base==NULL)//存储分配失败 exit(-1); head.top=head.base+head.size; head.size+=STACKINCREMENT; } *head.top++=e;//先传输据再移指针 return 1; }

       (3)弹栈操作

int pop(PNODE head,int e){
        //若栈不为空,则删除head的栈顶元素,用e返回其值
        if(head.top==head.base)
            return 0;
        e=*--head.top;//先移指针再传数据
        return 1;
}

3~~链式栈

  (1)链式栈的存储表示

 

typedef  struct Lnode{
        int data;//数据域
        struct Lnode *next;//指针域
}NODE,*PNODE;
 

 

 指向表头的指针为栈定指针

   (2)  压栈操作

int push(PNODE head,int e){
        phead=(PNODE)malloc(sizeof(NODE));
        p->data=e;
        p->next=head.next;
        head.next=phead;
        
}

  (3) 弹栈操作

int pop(PNODE head,int e){
        if(!head->next)
            return 0;
        phead=head->next;
        head->next=phead->next;
        e=phead->data;
        free(phead);
        return 1;
}

 

数据结构之第三章之栈

标签:

原文地址:http://www.cnblogs.com/xiaoyoucai/p/5932636.html

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