C++数据结构(栈的设计)

栈是一种特殊的线性表

栈仅能在线性表的一端进行操作。

栈顶:允许操作的一端

栈底:不允许操作的一端

首先它是一个线性表,也就是说在栈数据有线性关系,即前驱后继关系,只不过它是一种特殊的线性表而已。定义中说是在线性表的表尾进行插入和删除操作,这里表尾是指栈顶而不是栈底,它的特殊之处就在于限制和这个线性表的插入和删除位置,他始终只在栈顶进行,这也使得栈底是固定的,最先进站的只能在栈底.

#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

标签:前驱   结点   数据结构   性关系   不允许   尾部   生命周期   长度   框架   也就是说   只不过   元素   说是   容量   操作   业务   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top