栈是一种特殊的线性表
栈仅能在线性表的一端进行操作。
栈顶:允许操作的一端
栈底:不允许操作的一端
首先它是一个线性表,也就是说在栈数据有线性关系,即前驱后继关系,只不过它是一种特殊的线性表而已。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶而不是栈底,它的特殊之处就在于限制和这个线性表的插入和删除位置,他始终只在栈顶进行,这也使得栈底是固定的,最先进站的只能在栈底.
#include
#include
#include
#include"seqst ack.h"
/*
所有入栈的结点都是malloc 若要清空栈 把栈中元素弹出 并且释放结点内存
*/
typedef struct Teacher//链表的业务结点
{
LinkListNode node;//第一个元素
void* item;//栈的业务结点
}Teacher;
typedef struct _tag_LinkStackNode//链表的业务结点
{
LinkListNode node;//第一个元素
void* item;//栈的业务结点
}TLinkStackNode;
//void* item栈的业务结点 转换成链表的业务结点
int LinkStack_push(LinkStack*stack, void* item)
{
Teacher*tmp = NULL;
int ret = 0;
tmp = (Teacher*)malloc(sizeof(Teacher));
if (tmp == NULL)
{
return -1;
}
memset(tmp, 0, sizeof(Teacher));
tmp->item = item;
ret = LinkList_Insert(stack, (LinkListNode*)tmp, 0);
if (ret != 0)
{
printf("func LinkList_Insert() err:%d
", ret);
if (tmp != NULL)
{
free(tmp);
}
return ret;
}
return ret;
}
//框架搭建
//创建栈相当于创建线性表
SeqStack* SeqStack_Create(int capacity);
{
return SeqStack_Create(capacity);
}
//销毁栈相当于销毁线性表
void SeqStack_Destory(SeqStack*stack);
{
return;
}
//清空栈相当于清空线性表 清空栈的时候设涉及到栈元素生命周期的管理
void SeqStack_Clear(SeqStack*stack);
{
LinkStack_Clear(stack);
LinkList_Destory(stack);
return;
}
//向栈中压入元素,相当于链表在尾部插入元素
int SeqStack_push(SeqStack*stack, void*item);
{
return 0;
}
//从栈中弹出元素,相当于从链表的尾部 拿出元素
void SeqStack_pop(SeqStack* stack);
{
TLinkStackNode *tmp = NULL;
tmp = (TLinkStackNode *)LinkList_Delete(stack, 0);
if (tmp == NULL)
{
return NULL;
}
item = tmp->item;
return item;
}
//获取栈顶元素 相当于获取链表的尾部元素
void SeqStack_top(SeqStack* stack);
{
TLinkStackNode *tmp = NULL;
tmp = (TLinkStackNode *)LinkList_Get(stack, 0);
if (tmp == NULL)
{
return NULL;
}
return tmp->item;
}
//获取栈的大小,相当于获取链表的实际长度
int SeqStack_Size(SeqStack*stack);
{
return 0;
}
//获取栈的容量相当于获取线性表的容量
int SeqStack_Capacity(SeqStack*stack);
{
return 0;
}
#include
#include
#include
#include"seqst ack.h"
void main()
{
SeqStack*stack = NULL;
stack = SeqStack_Create(10);
int i = 0;
int a[10];
if (stack == NULL)
{
return;
}
//压栈
for (i = 0; i < 5; i++)
{
a[i] = i + 1;
SeqStack_push(stack, &a[i]);
}
printf("Capacity:%d
,SeqStack_Capacity(stack)");
printf("length:%d
", SeqStack_Size(stack));
printf("top:%d
", *((int*)SeqStack_Top(stack)));
while (SeqStack_Size(stack)>0)
{
int tmp =*((int*)SeqStack_Pop(stack));
printf("tmp:%d", tmp);
}
printf("
");
system("pause");
return;
}
页面更新:2024-05-04
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号