栈的一些简单操作

来源:互联网 发布:4g逛淘宝费流量么 编辑:程序博客网 时间:2024/05/01 15:55

我觉得栈应该应用是很多的吧,不过现在说的栈只有基本的操作,知道她了解她。

栈就是一个先进后出的链表,我说的是链式栈哈。我觉得顺序栈应该叫压箱子,链式栈该叫码砖。因为顺序栈代表有固定的深度,链式栈随便多长。

入栈就是一个一个的压,每个节点指向刚刚她压住的那一个。我觉得就是初始化能够理解了,出入栈的操作很简单的。

我觉着越简单的数据结构就要越理解深一点(完全理解不知道该是啥程度),因为以后很多东西都是从这些结构里延伸出来的。

差不多贴结构体了:

typedef struct Node{
    datatype data;//数据域
    struct Node *pNext;//指针域
}Node, *pNode;

typedef struct Stack {
    pNode Top;//栈顶
    pNode Bottom;//栈底
    
}Stack,*pStack;

#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef int datatype ;typedef struct Node{ datatype data;//数据域struct Node *pNext;//指针域}Node, *pNode;typedef struct Stack {pNode Top;//栈顶pNode Bottom;//栈底}Stack,*pStack;void Init(pStack ps);//初始化bool isEmpty(pStack ps);//是否为空void push(pStack ps, datatype item);//入栈void Traverse(pStack ps);//遍历bool pop(pStack ps,datatype *item);//出栈//=======================================//初始化void Init(pStack ps) {pNode pNew  = (pNode )malloc(sizeof(Node));//创建新节点if(!pNew) exit(-1);ps->Top = pNew ;//将新节点赋给顶和底ps->Bottom = pNew;//最终的栈底是没有存数据的ps->Top->pNext = NULL;//没数据 指向空return ;}//Init//==========================================//是否为空bool isEmpty(pStack ps) {if(ps->Top == ps->Bottom)return true;elsereturn false;}//isEmpty//==========================================//入栈void push(pStack ps, datatype item) {pNode pNew = (pNode )malloc(sizeof(Node));if(!pNew) exit(-1);pNew->data = item;//新节点pNew->pNext = ps->Top ;//指向栈顶ps->Top = pNew;//把新节点作为栈顶return ;}//push//============================================//遍历/*不能这样写while(ps->Top != ps->Bottom) {printf("%d ",ps->Top->data);ps->Top = ps->Top->pNext;//遍历的目的在于输出节点值,这样等于间接清空栈}*/void Traverse(pStack ps) {pNode temp = ps->Top ;while(temp != ps->Bottom ) {//未到栈底printf("%d ",temp->data );//换datatype的时候%d记得改temp = temp->pNext ;}//whilereturn ;}//Traverse//==============================================//出栈void pop(pStack ps,datatype &item) {if(isEmpty(ps)) {printf("空栈!\n");return ;}pNode temp = ps->Top ;item = temp->data ;// 获取出栈的数据ps->Top = temp->pNext ;//将栈顶的下一个节点作为栈顶free(temp);//释放空间temp = NULL ;}//pop//======================================//测试程序int main() {Stack s;int item;Init(&s);pop(&s,item);push(&s,1);push(&s, 2);push(&s, 3);push(&s, 4);push(&s,5);Traverse(&s);printf("\n");pop(&s,item);printf("出栈的是%d \n",item);while(!isEmpty(&s)) {pop(&s,item);printf("出栈的是%d \n",item);}Traverse(&s);return 0;}




0 0
原创粉丝点击