数据结构:链栈(含完整代码,可复制)

这篇具有很好参考价值的文章主要介绍了数据结构:链栈(含完整代码,可复制)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       链栈是采用链式存储结构实现的栈,通常用单链表来表示。链栈的优点是不存在栈满上溢的情况(只有在内存溢出时才会出现栈满,通常不考虑)。链栈的栈顶是链表的第一个结点,栈底是链表的最后一个结点,一个链栈可以由栈顶指针唯一确定。链栈的每个结点都包含两个域,数据域和指针域,与单链表的结点结构一样。链栈只能在栈顶进行入栈或出栈操作,类似于一个只能进行头插法或尾插法的单链表。文章来源地址https://www.toymoban.com/news/detail-790132.html

1.链栈的初始化

 Lsnode *InitStack(Lsnode *top)//初始化栈 
		{   top=(Lsnode *)malloc(sizeof(Lsnode));  
			top->next=NULL;
			printf("Stack is NULL.\n");
			return top;
		 }

2.插入一个元素

void Push(Lsnode *top, ElemType x)//插入一个元素 
		{Lsnode *p;
		 p=(Lsnode *)malloc(sizeof(Lsnode)); 
         p->data=x; 
         p->next=top->next;
         top->next=p;
		}

3.删除一个元素

 ElemType Pop(Lsnode *top) //删除一个元素 
	   {ElemType x; Lsnode *p;
        if(top->next!=NULL)
		{ p=top->next; top->next=p->next;
          x=p->data; free(p); return x;
		}
        else 
		{ printf("Stack null! \n");     
              exit(1); 
		}
	   }

4.取栈顶元素

  ElemType GetTop(Lsnode *top) //取栈顶元素 
	   {ElemType x; Lsnode *p;
        if(top->next!=NULL)
		{ p=top->next; 
          x=p->data;  return x;
		}
	       else 
		{ printf("Stack null! \n");     
              exit(1); 
		}
	   }

          

5.输出链栈

 void OutStack(Lsnode *top)//输出链栈 
       {ElemType x;Lsnode *p;
        p=top->next;
		while(p!=NULL)
		{ 
          x=p->data; printf("  %d  ",x);
		  p=p->next;
		}
       }	

6.完整代码

#include"stdio.h"
#include"stdlib.h"
typedef int ElemType;
typedef  struct Lsnode
{ElemType data;
 struct  Lsnode  *next;
} Lsnode; 

void OutStack(Lsnode *p);
Lsnode *InitStack(Lsnode *p);
void Push(Lsnode *p,ElemType x);
ElemType Pop(Lsnode *p);
ElemType GetTop(Lsnode *p);
Lsnode  *q; 
int main()
{ 
  ElemType  y,cord;ElemType a;

  do { printf("\n");
       printf("\n   主菜单\n");
       printf("\n 1 初始化栈\n");
       printf("\n 2 插入一个元素\n");
       printf("\n 3 删除栈顶元素\n");
       printf("\n 4 取栈顶元素\n");
       printf("\n 5 结束程序运行\n");
       printf("\n---------------\n");
       printf("请输入您的选择(1.2.3.4.5)"); scanf("%d",&cord);
       switch(cord)
           {case 1:q=InitStack(q);OutStack(q);
                    break;
            case 2:{printf("\n请输入要插入的数据:");scanf("%d",&a);
                   Push(q,a);OutStack(q);
                   }break;
            case 3:{a=Pop(q);printf("\n删除的是 %d\n",a);
                   OutStack(q);
                   }break;
            case 4:{y=GetTop(q);printf("\n 栈顶=%d\n",y);
                   OutStack(q);
                   }break;
            case 5:exit(1);
            }

       }while(cord<=5);
  }

        Lsnode *InitStack(Lsnode *top)//初始化栈 
		{   top=(Lsnode *)malloc(sizeof(Lsnode));  
			top->next=NULL;
			printf("Stack is NULL.\n");
			return top;
		 }

        void Push(Lsnode *top, ElemType x)//插入一个元素 
		{Lsnode *p;
		 p=(Lsnode *)malloc(sizeof(Lsnode)); 
         p->data=x; 
         p->next=top->next;
         top->next=p;
		}

	   ElemType Pop(Lsnode *top) //删除一个元素 
	   {ElemType x; Lsnode *p;
        if(top->next!=NULL)
		{ p=top->next; top->next=p->next;
          x=p->data; free(p); return x;
		}
        else 
		{ printf("Stack null! \n");     
              exit(1); 
		}
	   }

       ElemType GetTop(Lsnode *top) //取栈顶元素 
	   {ElemType x; Lsnode *p;
        if(top->next!=NULL)
		{ p=top->next; 
          x=p->data;  return x;
		}
	       else 
		{ printf("Stack null! \n");     
              exit(1); 
		}
	   }

          

       void OutStack(Lsnode *top)//输出链栈 
       {ElemType x;Lsnode *p;
        p=top->next;
		while(p!=NULL)
		{ 
          x=p->data; printf("  %d  ",x);
		  p=p->next;
		}
       }	

到了这里,关于数据结构:链栈(含完整代码,可复制)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【电子书分享】龙书《编译原理(第2版)》文字版中文 可复制 完整目录 pdf epub

    目录 龙书历史 龙书简介 作者 地址 编译原理三大圣书——龙书、虎书、鲸书。龙书作为其中之一,广受欢迎。 《计算机科学丛书:编译原理(第 2 版)》是编译领域无可替代的经典著作,被广大计算机专业人士誉为\\\"龙书\\\"。《计算机科学丛书:编译原理(第2版)》上一版自

    2024年02月05日
    浏览(50)
  • 利用MATLAB创建栅格地图(代码可复制)

    先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号: 启发式算法讨论 。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年提出的新型智能优化算法,并附MATLAB代码。 “有不

    2024年02月03日
    浏览(47)
  • python编程游戏代码可复制,python编程游戏代码教程

    大家好,小编来为大家解答以下问题,python编程游戏代码大全,编程猫,python编程游戏代码大全200行,今天让我们一起来看看吧! Source code download: 本文相关源码 大家好,给大家分享一下python编程游戏代码大全,很多人还不知道这一点。下面详细解释一下python自动化运维应用。

    2024年04月10日
    浏览(55)
  • python烟花代码简单可复制,python烟花代码加名字

    本篇文章给大家谈谈Python烟花代码总体功能介绍,以及python烟花代码简单可复制,希望对各位有所帮助,不要忘了收藏本站喔。 还有两天就到元旦了!!!很多小伙伴已经和朋友约好一起跨年了 但是现在很多地方都禁止烟花燃放,跨年没有烟花总感觉缺少一点味道~为了实现

    2024年03月15日
    浏览(47)
  • python烟花代码简单可复制,python烟花代码怎么写

    大家好,本文将围绕Python烟花代码总体功能介绍展开说明,python烟花代码简单可复制是一个很多人都想弄明白的事情,想搞清楚python烟花代码怎么写需要先了解以下几个事情。 Source code download: 本文相关源码 疫情太严重了,有很多小伙伴都不能出门玩耍了。给大家看一个特别

    2024年02月20日
    浏览(52)
  • python烟花代码简单可复制,python烟花代码怎么运行

    大家好,小编来为大家解答以下问题,Python烟花代码总体功能介绍,python烟花代码简单可复制,今天让我们一起来看看吧! 天是2023 的第9天,到了这个时间点,部分小伙伴已经开始复盘这一年的得与失。比如今年增加了多少技能点,看了多少本书,写了多少篇文章或者年前

    2024年01月22日
    浏览(57)
  • python游戏代码大全可复制,python最简单游戏代码

    大家好,小编来为大家解答以下问题,python游戏编程入门游戏代码,python游戏代码大全可复制,现在让我们一起来看看吧! 哈喽铁子们 表弟最近在学Python,总是跟我抱怨很枯燥无味,其实,他有没有认真想过,可能是自己学习姿势不对? 比方说,可以通过打游戏来学编程!

    2024年04月17日
    浏览(45)
  • 爱心代码编程python可复制,python有什么好玩的代码

    本篇文章给大家谈谈20行python代码的入门级小游戏,以及python简单好玩的编程代码,希望对各位有所帮助,不要忘了收藏本站喔。 大家好,我是辣条。 今天给大家带来30个py小游戏,一定要收藏! 目录 有手就行 1、吃金币 2、打乒乓 3、滑雪 4、并夕夕版飞机大战 5、打地鼠 简

    2024年01月17日
    浏览(52)
  • python游戏代码大全可复制,python小游戏代码大全

    大家好,本文将围绕python游戏编程入门游戏代码展开说明,python游戏代码大全可复制是一个很多人都想弄明白的事情,想搞清楚python小游戏代码大全需要先了解以下几个事情。 本篇文章给大家谈谈如何用python编写一个简单的小游戏,以及如何用Python做小游戏让别人玩,希望对

    2024年04月08日
    浏览(55)
  • python游戏代码大全可复制,python简单的小游戏代码

    本篇文章给大家谈谈python游戏编程入门游戏代码,以及python游戏代码大全可复制,希望对各位有所帮助,不要忘了收藏本站喔。 大家好,小编来为大家解答以下问题,初学者怎么用python写简单小游戏教程,如何用python编写一个简单的小游戏,今天让我们一起来看看吧! 1、

    2024年03月20日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包