没有合适的资源?快使用搜索试试~ 我知道了~
数据结构第三章.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 114 浏览量
2022-07-11
20:33:15
上传
评论
收藏 135KB PDF 举报
温馨提示
试读
14页
第三章 栈和队列 3.1 栈 1.栈的概念及运算: 栈(stack):栈是运算受限的线性表,只限制在表的一端进行运算,称 为栈顶(top),另一端称栈底(bottom),当表中无元素时称为空栈。 栈又称为后进先出(last in first out)的线性表。 栈又称为先进后出(first in last out)的线性表。 例 如:a1,a2……an ==>an,an-1,……a1 一叠书,一叠重物 运 算: 置空栈SETNULL(S) 判空栈EMPTY(S) 进栈PUSH(S,X) 退栈POP(S) 取栈顶TOP(S) //不改变栈的状态 2.顺序栈 顺 序 栈:栈的顺序存储结构称为顺序栈。 栈底位置不变,栈顶指针top用来指示栈顶位置 定 义:typedef struct { datatype data[maxsize]; int top; } seqstack; seqstack *s; 上溢,下溢,设初始情况下s->top=-1; 运 算:图示 置空栈 void SETNULL(seqstack *s) { s->top=-1; } 判栈空 int EMPTY(seqstac
资源推荐
资源详情
资源评论
第三章 栈和队列
3.1 栈
1.栈的概念及运算:
栈(stack):栈是运算受限的线性表,只限制在表的一端进行运算,称
为栈顶(top),另一端称栈底(bottom),当表中无元素时称为空栈。
栈又称为后进先出(last in first out)的线性表。
栈又称为先进后出(first in last out)的线性表。
例 如:a1,a2……an ==>an,an-1,……a1
一叠书,一叠重物
运 算:①置空栈SETNULL(S)
②判空栈EMPTY(S)
③进栈PUSH(S,X)
④退栈POP(S)
⑤取栈顶TOP(S) //不改变栈的状态
2.顺序栈
顺 序 栈:栈的顺序存储结构称为顺序栈。
栈底位置不变,栈顶指针top用来指示栈顶位置
定 义:typedef struct
{ datatype data[maxsize];
int top;
} seqstack;
seqstack *s;
上溢,下溢,设初始情况下s->top=-1;
运 算:图示
①置空栈
void SETNULL(seqstack *s)
{ s->top=-1;
}
②判栈空
int EMPTY(seqstack *s)
{ if (s->top>=0)
return FLASE;
else return TRUE;
}
③进栈
seqstack *s PUSH(seqstack *s,datatype x)
{ if (s->top==maxsize-1)
{ print(overflow);return NULL;} //上溢
else
{ s->top++;s->data[s->top]=x;}
return s;
}
④退栈
datatype POP(seqstack *s)
{ if (EMPTY(s))
{ print(underflow);return NULL;} //下溢
else
{ s->top--;
return s->data[s->top+1];
}
}
⑤取栈顶
datatype TOP(seqstack *s)
{ if (EMPTY(s))
{ print(stack is empty);return NULL;}//空栈
else
{ return s->data[s->top];
}
}
共享空间:若有多个顺序栈,为防止上溢则空间开销较大,可多个栈共
享空间,调节余缺,节省空间,又防止上溢发生的概率。当n>2时效率
较低。
例 如:两个栈共享空间的上溢、下溢和栈满问题。
|-----------栈s1-----------| |------------栈s2----
-----|
0 1 t1 t2 n-2
n-1
a1 a2 …… ai …… bj …… b2 b1
栈底1 栈顶1 栈顶2
栈底2
3.链栈
链 栈:栈的链式存储结构称为链栈。其操作仅限制在表头位置上进
行,不需设置头结点。
定 义:typedef struct node
{ datatype data;
struct node *next;
}linkstack *top;
top为栈顶指针,唯确定一个链栈。
当top==NULL时,链栈为空栈。
链栈是动态产生的,无需考虑上溢问题。
运 算:①进栈
linkstack * PUSHLSTACK(linkstack *top,datatype x)
{ linkstack *p;
p=malloc(sizeof(linkstack);
p->data=x;
p->next=top;
return p;
}
②出栈
linkstack * POPLSTACK(linkstack *top,datatype
*datap)
{ linkstack *p;
if (top==NULL)
{ print(underflow);return NULL;} //下溢
else
{ *datap=top->data;
p=top;
top=top->next;
free(p);
}
}
3.2 栈的应用举例
1.数制转换问题
十进制数N和其它d进制的转换是计算机实现计算的基本问题,其解
决方法很多,其中一个简单算法基于下列原理:
N=(N/d)*d+N%d
例如:(1348)
10
=(2504)
8
,其运算过程如下:
剩余13页未读,继续阅读
资源评论
是空空呀
- 粉丝: 168
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功