c语言数据结构中top,C语言数据结构--栈

1.  什么是栈栈其实就是一种线性表。只不过它有点特殊,它的特殊性主要体现在它是一种后进先出(Last In First Out)的线性表,跟队列刚好相对应,队列刚好是先进先出(First In First Out)的在栈中只能在一端进行操作,就是说保存数据和取出数据只能从线性表的一端进行,一般地操作端我们称之为栈顶,另一端则称为栈底。2.  栈的基本操作栈的基本操作只有两个:

入栈(push):即将数据保存在栈顶。进行该操作前,先修改栈顶指针,使其向上移动一个元素位置,然后将数据保存在栈顶指针所指向的位置。

出栈(pop):即将栈顶的数据弹出,然后修改栈顶指针,使其指向栈中的下一个元素。

在栈中,只有栈顶元素是可以访问的。3.  两种栈一般地,栈使用两种存储表示方法。

顺序栈:使用一组连续的内存单元依次保存栈中的数据。一般情况下使用数组作为顺序栈,序号为0的元素就是栈底,再定义一个变量来保存栈顶的序号即可。

链式栈:使用链表形式来保存栈中个元素的值,链表尾部(指向地址NULL)为栈底,链表的首部(head指针所指向的元素)为栈顶。

两种栈的最大区别就是顺序栈是分布在一片连续的内存单元里,而链式栈一般是分布在零散的内存单元当中。接下来我们使用顺序栈来实现一个保存学生姓名和年龄的小实例。下面我们来一步一步的缕一下整个思路。1.要使用栈,那么我们首先应该定义一个栈结构

代码://定义顺序栈的结构

typedef struct stack

{

student data[SIZE+1];    //数据元素

int top;              //栈顶

}SeqStack;

其中栈结构里面包含了2个元素,一个是结构体数组,数组名为data,其类型为student结构体,用来保存学生的姓名和年龄。另一个整形变量top用来表示栈顶的序号。2.定义好了栈结构,接下来就应该初始化栈。

代码://初始化栈

SeqStack * SeqStackInit()

{

SeqStack *p;

if (p = (SeqStack *)malloc(sizeof(SeqStack)))         //申请栈内存

{

p->top = 0;

return p;

}

return NULL;             //申请内存失败返回空值

}

你可能感兴趣的:(c语言数据结构中top)