数据结构之第三章之栈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之第三章之栈相关的知识,希望对你有一定的参考价值。

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

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;
}

 

以上是关于数据结构之第三章之栈的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之栈代码实现

数据结构之栈和队列

数据结构之栈

数据结构之栈

数据结构之栈

数据结构之栈