一、定义
栈(FILO)是一种特殊的数据结构,它的特性是只能在栈顶通过push的方法来存放数据,也只能通过pop这种操作来
弹出栈顶数据,它的这种结构也就决定了它是先进后出的这与队列刚好相反。
二、使用
栈的操作就是入栈,出栈。下面我用链式存储结构来实现栈,还有它的一些API。
typedef int SeqType;
typedef struct Node//定义数据节点
{
SeqType data;
struct Node *next;
}Node;
typedef struct Header//定义头节点
{
int Length;
Node *top;//栈顶指针
}Header;
Header *Creat_Stack()//创建栈
{
Header *header = NULL;
header = (Header *)malloc(sizeof(Header));
header->Length = 0;
header->top = NULL;
return header;
}
bool Push_Stack (Header *header,Node *node)//入栈
{
if(header->Length == 0)
{
header->top = node ;
node->next = NULL;
header->Length ++;
return true;
}
node->next = header->top;
header->top = node;
header->Length ++;
return true;
}
bool Pop_Stack(Header *header)//弹出栈顶元素
{
Node *tem = NULL;
if(header->Length = 0)
{
printf("这个栈是空的,不能进行出栈操作");
}
tem = header->top;
header->top = header->top->next;
free(tem);
header->Length --;
return true;
}
bool Destory_Stack(Header *header)//摧毁栈
{
Node *current = NULL;
Node *tem = NULL;
current = header->top;
if(header->Length == 0)
{
printf("该栈中无元素,不需要摧毁");
return true;
}
while(current)
{
tem = current;
current=current->next;
free(tem);
header->Length --;
}
return true;
}
int main()
{
Header *header;
header = Creat_Stack();
Node *a = (Node *)malloc(sizeof(Node));
a->data = 1;
Node *b = (Node *)malloc(sizeof(Node));
b->data = 2;
Node *c = (Node *)malloc(sizeof(Node));
c->data = 3;
Push_Stack(header,a);
Push_Stack(header,b);
Push_Stack(header,c);
Pop_Stack(header);
printf("%d",header->top->data); //出栈之后栈顶元素为2
}
欢迎各位指出不足之处。