热门教程推荐
  • 【一】算法是什么
    【一】算法是什么
    提到“算法”,很多人都觉得它高深莫测、晦涩难懂。事实上的确存在一些算法,学员必须具备优秀的数学基础和编程能力才能驾驭。
  • 【二十一】创建之单例设计模式
    【二十一】创建之单例设计模式
    单例模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
  • 【九】部分背包问题
    【九】部分背包问题
    背包问题是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
  • 【二】Unity3D视图界面
    【二】Unity3D视图界面
    Unity3D视图界面Unity3D视图界面Unity3D视图界面Unity3D视图界面Unity3D视图界面Unity3D视图界面Unity3D视图界面Unity3D视图界面
  • 【九】Unity3D游戏发布
    【九】Unity3D游戏发布
    Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布Unity3D游戏发布
  • 【十】表查找解
    【十】表查找解
    查找表又可分为静态查找表和动态查找表。借助静态查找表可引申出顺序查找算法、折半查找算法、分块查找算法等;而记住动态查找表,也可以通过构建二叉排序树、平衡二叉树等实现查找操作。
  • 【二】游戏世界之渲染窗口
    【二】游戏世界之渲染窗口
    游戏世界之渲染窗口
  • 【九】动态内存管理
    【九】动态内存管理
    动态内存管理机制,主要包含两方面内容,用户申请内存空间时,系统如何分配;用户使用内存空间完成后,系统如何及时回收。

【C语言】能否用两个栈实现一个队列的功能

4635

参考答案:

//结点结构体:
typedef struct node
{
   int data;
   node *next;
}node, *LinkStack;
//创建空栈:
LinkStack CreateNULLStack(LinkStack &S)
{
   S = (LinkStack)malloc(sizeof(node)); //申请新结点
   if (NULL == S)
   {
   	printf("Fail to malloc a new node.\n")
   		return NULL;
   }
   S->data = 0; //初始化新结点
   S->next = NULL;
   return S;
}
//栈的插入函数:
LinkStack Push(LinkStack &S, int data)
{
   if (NULL == S) //检验栈
   {
   	printf("There no node in stack!");
   	return NULL;
   }
   LinkStack p = NULL;
   p = (LinkStack)malloc(sizeof(node)); //申请新结点
   if (NULL == p)
   {
   	printf("Fail to malloc a new node.\n");
   	return S;
   }
   if (NULL == S->next)
   {
   	p->next = NULL;
   }
   else
   {
   	p->next = S->next;
   }
   p->data = data; //初始化新结点
   S->next = p; //插入新结点
   return S;
}
//出栈函数:
node Pop(LinkStack &S)
{
   node temp;
   temp.data = 0;
   temp.next = NULL;
   if (NULL == S) //检验栈
   {
   	printf("There no node in stack!");
   	return temp;
   }
   temp = *S;
   10
   	if (S->next == NULL)
   	{
   		printf("The stack is NULL,can't pop!\n");
   		return temp;
   	}
   LinkStack p = S->next; //节点出栈
   S->next = S->next->next;
   temp = *p;
   free(p);
   p = NULL;
   return temp;
}
//双栈实现队列的入队函数:
LinkStack StackToQueuPush(LinkStack &S, int data)
{
   node n;
   LinkStack S1 = NULL;
   CreateNULLStack(S1); //创建空栈
   while (NULL != S->next) //S 出栈入 S1
   {
   	n = Pop(S);
   	Push(S1, n.data);
   }
   Push(S1, data); //新结点入栈
   while (NULL != S1->next) //S1 出栈入 S
   {
   	n = Pop(S1);
   	Push(S, n.data);
   }
}


说明:用两个栈能够实现一个队列的功能,那用两个队列能否实现一个队列的功能呢?结果是否定的,因为栈是先进后出,将两个栈连在一起,就是先进先出。而队列是现先进先出,无论多少个连在一起都是先进先出,而无法实现先进后出。


特别声明:本文仅供交流学习 , 版权归属原作者,并不代表游民部落赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。

相关推荐:

精品教程推荐
  • 【四】3D美术资源规范
    【四】3D美术资源规范
    美术3D资源规范美术3D资源规范美术3D资源规范美术3D资源规范美术3D资源规范
  • 【三十】游戏UI之列表和无线列表
    【三十】游戏UI之列表和无线列表
    游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表游戏UI界面之列表和无线列表
  • 【二十】排序之快速排序算法
    【二十】排序之快速排序算法
    提到排序算法,多数人最先想到的就是快速排序算法。快速排序算法是在分治算法基础上设计出来的一种排序算法,和其它排序算法相比,快速排序算法具有效率高、耗费资源少、容易实现等优点。
  • 【二】项目工程结构规划
    【二】项目工程结构规划
    项目工程结构规划项目工程结构规划项目工程结构规划项目工程结构规划
  • 【六】数组和广义表
    【六】数组和广义表
    数组存储结构,99%的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。
  • 【七】Unity3D模型与动画
    【七】Unity3D模型与动画
    Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画Unity3D模型与动画
  • 【四十三】图之图的应用
    【四十三】图之图的应用
    当图的每条边都被分配了权重时,我们就有了一个加权图,如果边的权重被忽略,那么可以将(每条边的)权重都视为1(译者注:权重都是一样,也就是无权重)。
  • 【八】贪心算法
    【八】贪心算法
    贪心算法是所有算法中最简单,最易实现的算法,该算法之所以“贪心”,是因为算法中的每一步都追求最优的解决方案。