⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 链式堆栈.cpp

📁 数据结构每章算法
💻 CPP
字号:
//* * * * * * * * * * * * * * * * * * * * * * * * *
//*CHAPTER          :3  (3_3)                     *
//*PROGRAM          :链式堆栈                     *
//*CONTENT          :初始化,入栈,出栈,取栈顶元素  *
//* * * * * * * * * * * * * * * * * * * * * * * * *
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
enum BOOL{False,True};
typedef struct Lnode       //定义节点结构
{char  data;               //数据域
 struct Lnode *next;       //后向指针
}LNode,*LPoint;
void initial(LPoint&);    //初始化一个堆栈
void  push_linkstack(LPoint&,char);       //将一个元素入栈
BOOL pop_linkstack(LPoint&,char &);        //将一个元素出栈
void print_linkstack(LPoint); //显示栈中所有元素
void main()
{LPoint ls,p;
 char ch,j;
 int flag=1;
 BOOL temp;
 textbackground(3);  //设定屏幕颜色
 textcolor(15);
 clrscr();
 //---------------------程序解说-----------------------
 printf("本程序实现链式结构的堆栈操作。\n");
 printf("链式堆栈不会产生溢出问题。\n");
 printf("可以进行入栈,出栈,取栈顶元素等操作。\n");
 //----------------------------------------------------
 
 initial(ls);       //初始化堆栈S
 while(flag)
    { printf("请选择:\n");
      printf("1.显示栈中所有元素\n");
      printf("2.入栈       \n");
      printf("3.出栈       \n");
      printf("4.退出程序   \n");
      scanf(" %c",&j);
      switch(j)
	{case '1':print_linkstack(ls);
		  break;
	 case '2':printf("请输入要入栈的元素(一个字符):");
		  scanf(" %c",&ch);   //输入要入栈的字符
		  push_linkstack(ls,ch);//入栈
		  print_linkstack(ls);
		  break;
	 case '3':temp=pop_linkstack(ls,ch);  //出栈
		  if(temp==True)
		      {printf("出栈一个元素:%c\n",ch);//若栈不空,显示出栈的元素
		       print_linkstack(ls);
		      }
		else printf("堆栈已空!\n");//否则堆栈为空
		break;
	 default:flag=0;printf("程序结束,按任意键退出!\n");
	}
    }
 getch();
}

void initial(LPoint &pi)
{pi=NULL;   //栈顶指针初始化为NULL
}

void push_linkstack(LPoint &pi,char ch)
{//入栈,由于采用链式结构,一般不会产生栈满的情况
 LPoint po;
 po=(LPoint)malloc(sizeof(LNode));//生成一个新节点
 po->data=ch;                     //赋值
 po->next=pi;                  //新节点的后向指针指向原栈顶节点
 pi=po;                          //站顶指针指向新节点
}

BOOL pop_linkstack(LPoint &pi,char &e)
{//出栈,成功返回True,并用e返回该元素值,失败返回False
 LPoint po;
 po=pi;
 pi=po->next;                  //栈顶指针指向下一个节点
 if(po==NULL) return False;    //栈已空
 else {e=po->data;
       return True;  
      }                    
}

void print_linkstack(LPoint p)     
{//显示栈中所有元素
 if(p==NULL) printf("堆栈已空!\n");//栈为空
 else  {printf("堆栈所有元素:");
	while(p!=NULL)                       //否则显示栈中所有元素
	    {printf("%c ",p->data);
	     p=p->next;
	    }
	printf("\n");
       }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -