分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入栈序列为1 2 3 4 5,出栈则为5 4 3 2 1
#include
#include
using namespace std;
#include
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} LinkStack;
void InitLinkStack (LinkStack * & s)
{
s=(LinkStack *)malloc(sizeof(LinkStack));
s->next=NULL;
}
int IsEmptyLinkStack (LinkStack *s)
{
return (s->next==NULL);
}
void PushLinkStack(LinkStack* &s , ElemType x)
{
LinkStack *p;
p=(LinkStack*)malloc(sizeof(LinkStack));
p->data=x;
p->next=s->next;
s->next=p;
}
int PopLinkStack (LinkStack* & s, ElemType &x)
{
LinkStack * p;
if(s->next==NULL)
return 0;
p=s->next;
x=p->data;
s->next=p->next;
free(p);
return 1;
}
int GetLinkStackTop (LinkStack* s, ElemType &x)
{
if(s->next==NULL)
return 0;
x=s->next->data;
cout<<x;
/*printf("%c",x);*/
return 1;
}
int main()
{
LinkStack *L;
char m[99];
int i=0;;
InitLinkStack(L);
gets(m);
while(m[i]!='#')
{
PushLinkStack(L,m[i]);
GetLinkStackTop(L,m[i]);
i++;
}
return 0;
}
STL的
:
#include
#include
using namespace std;
stack s;//可放在main内
int main()
{
int i;
for(i=0;i<10;i++)
s.push(i+1);//向栈顶赋值
s.top()++;//对栈顶元素进行操作
while(!s.empty())//非空
{
cout<<s.top()<<endl;//输出栈顶元素
s.pop();
}
return 0;
}
1、初始化栈
/*功能:初始化栈
*函数名:InitStack
*返回值:void
*/
void InitStack(stack *p)
{
p->top=-1;
}
2、判断栈为满
/*功能:判断栈为满
*函数名:IsFull
*返回值:为满——真1,非满——假0
*/
BOOL IsFull(stack *p)
{
if(MAXSIZE-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
3、判断栈为空
/*功能:判断栈为空
* 函数名:IsEmpty
*返回值:为空——真1,非空——假0
*/
BOOL IsEmpty(stack *p)
{
if(-1==p->top)
{
return TRUE;
}else
{
return FALSE;
}
}
4、进栈
/*功能:进栈
*函数名:push
*返回值:成功TRUN 失败FALSE
*注:不能为满,否则进栈失败
*/
BOOL push(stack *p,StackType data)//p=&s
{
//判断栈是否为满
if(TRUE==IsFull(p))//为满
{
return FALSE;//返回失败
}
p->buf[++p->top]=data;
return TRUE;//返回成功
}
5、出栈
/*功能:出栈
*函数名:pop
*返回值:出栈成功TRUE 失败FALSE
*/
BOOL pop(stack *p,StackType *pd)
{
//判断是否为空,为空出栈无意义
if(TRUE==IsEmpty(p))
{
return FALSE;//出栈失败
}
*pd=p->buf[p->top--];//优先级->大于--
return TRUE;//出栈成功
}
扩展资料:
主函数:
void main()
{
//定义变量:类型 变量名
//struct st s;
struct st s;//分配空间
//初始化
InitStack(&s);
int num=0;
printf("请输入");
scanf("%d",&num);
//求二进制
while(num!=0)
{
//将余数入栈
if(FALSE==push(&s,num%2))
{
return;//结束
}
num/=2;
}
//将二进制结果取出来
char value=0;
while(FALSE!=pop(&s,&value))
{
printf("%d",value);
}
printf("
");
}
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define Status int
#define SElemType int
#include "stdio.h"
#include "malloc.h"
/* 栈的操作
SElemType 栈的数据类型
Status InitStatck(SqStack &s) 初始化栈
Status DestoryStatck(SqStack &s) 销毁栈
Status ClearStack(SqStack &s) 清除栈
bool StackEmpty(SqStack s) 栈是否为空
int StackLength(SqStack s) 栈的长度
Status GetTop(SqStack s,SElemType &e) 得到栈顶
Status Push(SqStack &s,SElemType e) 压栈
Status Pop(SqStack &s,SElemType &e) 出栈*/
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
/*==================================
功能: 初始化栈
参数: SqStack
返回:OVERFLOW or TRUE;
//=================================*/
Status InitStatck(SqStack &s){
s.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!s.base)
{
return OVERFLOW;
}
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 销毁栈
参数: SqStack
返回: OK;
//=================================*/
Status DestoryStatck(SqStack &s){
s.top=s.top;
s.stacksize=0;
free(s.top);
free(s.base);
return OK;
}
/*==================================
功能: 清除栈
参数: SqStack
返回: OK;
//=================================*/
Status ClearStack(SqStack &s){
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
return OK;
}
/*==================================
功能: 判断栈是否为空
参数: SqStack
返回: TRUE or FALSE
//=================================*/
bool StackEmpty(SqStack s){
if(s.base==s.top)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*==================================
功能: 得到栈的长度
参数: SqStack
返回: int 栈的长度
//=================================*/
int StackLength(SqStack s){
if(s.base=s.top)
{
return ERROR;
}
else
{
return (s.top-s.base);
}
}
/*==================================
功能: 得到栈的TOP
参数: SqStack ,SElemType
备注: 仅仅得到数据,不出栈;
返回: SElemType类型的数据
//=================================*/
Status GetTop(SqStack s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
/*==================================
功能: 压栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Push(SqStack &s,SElemType e){
if(StackLength(s)==STACK_INIT_SIZE)
{
SElemType *tem;
tem=(SElemType*)realloc(s.base,
(STACK_INIT_SIZE + STACKINCREMENT) * sizeof(SElemType));
if(!tem)
{
return ERROR;
}
s.base=tem;
s.top=s.base+STACK_INIT_SIZE;
s.stacksize+=STACKINCREMENT;
*(s.top++)=e;
return OK;
}
else
{
*(s.top++)=e;
return OK;
}
}
/*==================================
功能: 出栈
参数: SqStack ,SElemType
返回: ERROR OR OK
//=================================*/
Status Pop(SqStack &s,SElemType &e){
if(StackEmpty(s))
{
printf("this statck is empty !/n");
return ERROR;
}
else
{
e=*(--s.top);
return OK;
}
}
//void StackTraverse(SqStack,void Fun()){
void main(){
SqStack statck;
InitStatck(statck);
for(int i=0;i<5;i++)
{
if(Push(statck,i))
{
printf("%d is push in this statck success!/n",i);
}
else
{
printf("/n/thappen a error/n/t");
}
}
int tem;
printf("now i will print this top of statck !/n");
GetTop(statck,tem);
printf("%d is top of this statck/n",tem);
}
数据结构书上不都有么?
分别写函数实现初始化栈、入栈、出栈、判断栈空、判断栈满。例如入...
1、初始化栈 \/*功能:初始化栈 函数名:InitStack 返回值:void \/ void InitStack(stack *p){ p->top=-1;} 2、判断栈为满 \/*功能:判断栈为满 函数名:IsFull 返回值:为满——真1,非满——假0 \/ BOOL IsFull(stack *p){ if(MAXSIZE-1==p->top){ return TRUE;}else { return ...
不要在构造函数中初始化任何变量”为什么
而是从Awake开始的”。在构造函数中初始化变量,一般来说目的是将类的状态设置到一个“初始状态”,对于MonoBehaviour来说,你相当于在这个类的生命周期之外设定了它的状态,此时这个代码就是不严谨的,而应该放在Awake里面去。
在C语言中,什么是声明、定义、初始化?有什么区别
包含函数实现的叫做函数的定义,一般位于.c文件中,如:int func(int a){return a+1;} 不包含函数实现,只包含函数名的叫做函数的声明,一般位于.h文件中。如:int func(int a);2.定义和初始化是针对变量的概念:int a;就是变量的定义 a=0;就是变量的初始化 ...
C++中,函数初始化是什么意思。为什么要进行初始化?
初始化就是在变量对象定义的时候赋值,防止没有赋值后面调用的时候出问题,或者说 初始化表上有个默认值。
c#中怎么在函数中对类初始化?
按你的写法,如果在load中不先实例化s,那么要么将create改为 private void create(){return new test(9);} 然后在load里 s=create();messagebox...或者将create改为 private void create(out test t){t=new test(9);} 调用的时候一样 create(out s);messagebox.show......
关于类的定义中的初始化
类的初始化指用构造函数初始化:1、在初始化列表中初始化与在构造函数的函数体中赋初值的区别:定义是指开辟空间,初始化是指给一个初值。在初始化列表中初始化时,定义和初始化同时进行,因此初始化的顺序与初始化列表的顺序无关,只与声明成员的次序相同;2、必须使用初始化列表的成员,有些成员必须...
函数的定义跟初始化好像很难界定啊。
定义就是写一个完整的函数。声明是对于编译器来说的,如果你这个函数在main中调用了,你这个函数定义在了main的后边,编译器从上到下到main中时候,找不到这个函数,它就会发出错误。说找不到这个函数。你可以吧,这个函数的在main之前声明一下,这个编译器就知道有这么一个函数,无论你在哪里。也...
是不是写一个类必须要自己写构造函数?
一般如果你要在实例化这个类的时候希望它把像:成员变量初始化等等操作完成的话,你就可以自己显式的写上一个,如果不必做这些的话,不写没关系,编译器给你个默认为空的构造函数。
怎样在类里用构造函数初始化二维数组
matrix a( {{1,2}, {3,4}, {5,6}} ); \/\/ 使用二维数组初始化对象 return 0;} ```在上述代码中,我们定义了一个类`matrix`,并在其中实现了一个接受二维数组参数的构造函数。在main函数中,我们创建了一个符合要求的二维数组,并使用其来初始化一个`matrix`对象。运行以上代码,输出结果...
C语言 用函数初始化结构变量
for(i = 0; i < 50; ++i){ hdl->rtus[i].rtuindex = 0 hdl->rtus[i].a = 0;hdl->rtus[i].b = 0;hdl->rtus[i].c = 0;} } 调用 Init(& handlertus);即可。不过结构:struct stu_handlertus { int count;struct stu_handlertus rtus[50];}handlertus;是错误的,原因是这...
势先复方: #ifndef Node_#define Node_ template <class T> class LinkedStack; template <class T> class LinkedQueue; template <class T> class Node { friend LinkedStack<T>; friend LinkedQueue<T>; private: T data; Node<T> *link; };#endif// file lstack.h// ...
吉利区17537961229: 设计一个栈类 实现初始化栈、入栈、出栈、判栈空 - ?
势先复方: #include<iostream> using namespace std; typedef char ElemType; typedef class linknode { public: void InitStack(linknode *&s); //初始化栈 void ClearStack(linknode *&s); //销毁栈 int StackLength(linknode *s); //求栈的长度 int StackEmpty(...
吉利区17537961229: 急!用C语言编写个使用栈的程序,简单点的,包含入栈,出栈等几个基本操作就行. - ?
势先复方: 就用这堆函数就可以了,不懂再追问 #include#define MaxSize 100 int mystack[MaxSize];/* 第0个单元保存现在的长度 *//* 初始化函数 */ void init_stack(int* stack){memset(stack,0,sizeof(stack)); }/* 入栈函数 */ void push_back(int* ...
吉利区17537961229: 编写一个Stack类,实现简单的栈操作.设栈是由链表实现的,其成员函数有初始化、入栈、出栈和显示栈中 - ?
势先复方: 设栈是由链表实现的,其成员函数有初始化、入栈、出栈和显示栈中数据四个:void Init()、void Put(int)、int Get()、void Print(). Stack类的数据成员只有一个指向链首的指针,即头指针. 链表结点的结构为: struct Node{int a;Node* next;};主函数中:(1)由键盘输入2个整数入栈,然后显示栈中所有数据. (2)弹出一个数据并显示该数,然后再显示栈中数据. (3)重复步骤(2)一次. Input输入两个整数,如:10 -1Output输出执行结果,如: stack:10,-1pop:-1stack:10pop:10stack:NULL用C++实现 拜托了 着急!
吉利区17537961229: 试编写一个算法,让两个顺序栈共用一个数组stack[N],分别实现入栈\出栈操作 - ?
势先复方: 要2个栈公用一个存储空间看来栈顶指针只能从两端开始了(和队列有点像) 设2个栈为s0,s1 ,s1初始的栈顶指针为-1,s2的初始栈顶指针为N typedef struct { elemtype stack[N]; //栈存储空间 int top[2]; //top为两个栈顶指针 }St; St s;//s为全局变量用...
吉利区17537961229: 数据结构.编写主函数实现顺序栈的基础操作(建栈、入栈、出栈、销毁栈、取栈顶元素、显示栈、清除栈) - ?
势先复方: class Stack { private: int top; int s[100]; public: void Ini_Stack(); void Push_Stack(int e); void Pop_Stack(); void Empty(); }void Stack::Ini_Stack() { memset(s, 0, sizeof(s)); top ^= top; }void Stack::Push_Stack(int e) { if(top == sizeof(s)/sizeof(int)) return; ...
吉利区17537961229: 用c语言编写一个程序实现顺序栈的初始化,出栈和入栈.急需,谢谢 - ?
势先复方: #define STACK_SIZE 100 #define PUSH_POP_SUCCESS 1 #define PUSH_POP_ERROR 0struct _stackbuf {int _collection[STACK_SIZE];int _top; }; typedef struct _stackbuf S_STACK; typedef unsigned int u_int_f;// 入栈 u_int_f push(S_...
吉利区17537961229: 编写函数实现的顺序栈的初始化、入栈、出栈、判断栈是否为空的算法,并应用与表达式的括号匹配检测 - ?
势先复方: STL的 : #include<iostream> #include<stack> using namespace std; stack<int> s;//可放在main内 int main() { int i; for(i=0;i<10;i++) s.push(i+1);//向栈顶赋值 s.top()++;//对栈顶元素进行操作 while(!s.empty())//非空 { cout<<s.top()<<endl;//输出栈顶元素 s.pop(); } return 0; }
吉利区17537961229: 用C语言编程实现顺序栈的基本操作. - ?
势先复方: # include# include # define M 10 struct student { int number; struct student *next,*prev; }; struct student *p,*pp,*fornt,*po,*q,*top=NULL; struct student *del(struct student *top); struct student *add(struct student *top); void main() { int i=1; while(i<=M) { ...
吉利区17537961229: 数据结构.编写主函数实现顺序栈的基础操作(建栈、入栈、出栈、销毁栈、取栈顶元素、显示栈、清除栈,) - ?
势先复方: #include "stdio.h" #include "stdlib.h" #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef struct Stack{ int*base; int*top; int size; }Stack; void init(Stack*S) { S->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int)); S->top=S->...