c语言数据结构--栈


一、栈简介

栈属于线性结构中的一种。
栈必须通过顺序表或链表来实现。
栈是一种后进先出的线性表,数据结构“栈”规定数据只能在表尾进行数据的删除和插入操作栈数据只能在末尾进行操作,这就是栈结构的独特之处


栈数据(链表或顺序表的末尾)称之为 栈顶,反之(链表头)称之为栈底。


栈与链表的不同之处:栈数据只能先进后出,而链表中数据的出入方式不受任何限制。
栈是一个结构体,链表是由多个结构体链接生成一个数据结构

二、创建栈

typedef struct {
数据类型 *base;
数据类型 *top;
int size;
}zhan;
//定义一个顺序栈zhan类型
zhan类型包含三个数据类型:
base:指向栈底的指针
top:指向栈定的指针
size:当前栈的最大容量


创建一个栈的任务:
1 在内存中开辟一段连续的空间的物理存储空间
2 将栈顶 栈底地址赋值给base top地址,并设置size栈的最大容量


#define STACK_SIZE 10
initStack(zhan *s){
s->base = (数据类型 *)malloc(STACK_SIZE*sizeof(数据类型));
if(!s->base) exit(0);
s->top = s->base;
s->size = STACK_SIZE;
}


三、数据入栈

#defin STACKIN 10
insert(zhan *s,数据类型 e){
if(s->top -s->base =s->size) {

s->base =(数据类型 *)realloc(s->base,(s->size+STACKIN)*sizeof(数据类型)));

if(!s->base) exit(0);//内存重新分配失败

s->top = s->base+s->size;

s->size =s->size +STACKIN;
}

*(s->top) =e;
s->top++;
}


四、数据出栈

数据类型 * out(zhan *s){
数据类型 *t;
t = s->top–;
if(s->top != s->base)
{
s->top –;
}
return t;
}


五、销毁和清空一个栈

5.1 清空栈
void clearStack(zhan *s){
s->top =s->base;
}
5.2 销毁栈
void clear(zhan *s){
free(s->base);
}


六、栈已存储容量计算

int StackLen(zhan *s){
return s->top-s->base;
}


七、实例分析 及实际应用

栈的优点:

相关阅读:
c语言结构体定义
c语言sizeof用法