顺序栈和链栈的初始化插入和删除
2015-09-04 10:46
441 查看
栈是一种只能在线性表的一端进行插入或删除操作的线性表,它的特点是先进后出(FILO)后进先出(LIFO)。
栈分为顺序栈和链栈,它们的特点分别如下:
顺序栈:用一维数组s[M]来表达,top代表栈顶,当栈是空的,top=-1,当栈是满的top=M-1。
顺序栈的定义:
出栈:
链栈:
当栈是空的top=NULL,栈是满的top-base=MAXSIZE;
定义:
入栈:
出栈:
链栈的一个整体代码:
栈分为顺序栈和链栈,它们的特点分别如下:
顺序栈:用一维数组s[M]来表达,top代表栈顶,当栈是空的,top=-1,当栈是满的top=M-1。
顺序栈的定义:
typedef int ElemType; typedef struct sqstack { ElemType data[maxsize]; int top;//栈当前可使用的最大容量 }sqstack;进栈:
ElemType push(ElemType x,sqstack *ss) { if(ss->top==maxsize-1) { printf("overflow\n"); return 0; } else { ss->data[++(ss->top)]=x; return 1; } }
出栈:
<pre name="code" class="cpp">ElemType pop(sqstack *ss) { if(ss->top<0) { printf("underflow\n"); return 0; } else return ss->data[ss->top--]; }
链栈:
当栈是空的top=NULL,栈是满的top-base=MAXSIZE;
定义:
typedef int datatype; typedef struct linkstack { datatype data; struct linkstack *next; }linkstack;
入栈:
void lsPush(linkstack *LS,int x) { linkstack *p; p=new linkstack; p->data=x; p->next=top; top=p; }
出栈:
void lsPop() { linkstack *p; datatype value; if(top==NULL) { printf("underflow\n"); } else { p=top; value=p->data; top=top->next; delete p; printf("popout %d\n",value); } }
链栈的一个整体代码:
#include<time.h>
#include<math.h>
# include <stdio.h>
# include <stdlib.h>
typedef int datatype; typedef struct linkstack { datatype data; struct linkstack *next; }linkstack;
linkstack *top;
void lsPush(linkstack *LS,int x) { linkstack *p; p=new linkstack; p->data=x; p->next=top; top=p; }
void lsPop() { linkstack *p; datatype value; if(top==NULL) { printf("underflow\n"); } else { p=top; value=p->data; top=top->next; delete p; printf("popout %d\n",value); } }
void initLS(linkstack *LS,int n)
{
top=NULL;
printf("输入%d个数字,以0结束",n);
scanf("%d",&n);
while(n!=0)
{
lsPush(LS,n);
scanf("%d",&n);
}
}
int main()
{
linkstack *link;
link=new linkstack;
initLS(link,8);
lsPop();
}
相关文章推荐
- 文件描述符和文件指针的区别
- EventBus使用简介
- 分块大法好
- java动态语言invokedynamic(2)
- QuickNews新闻客户端源码
- SVN 之Versions破解教程
- HDU 1242 Rescue - DFS 回溯
- AFNetWork设置身份验证
- iOS开发之有趣的UI —— UIScrollerView 控件及案例
- 如果根据键盘的frame始终让一个控件始终在键盘的顶部
- ldr r0, =0x12345678的含义说明
- 大象喝水
- 我永远不会嘲笑你、嫌弃你
- 欧拉角,旋转变换阵
- IOS中assign、copy 、retain、strong、weak等关键字的含义
- 简单算法学习之时间复杂度的计算
- AP_1.Invoice 的种类
- 操作系统与硬件、其他系统软件以及用户之间的关系
- 类别、延展、继承
- 安装oracle无法使用命令/usr/bin/xdpyinfo自动检查显示器颜色