首页 > 代码库 > 数据结构之第三章之栈

数据结构之第三章之栈

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

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=http://www.mamicode.com/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;}

 

数据结构之第三章之栈