C语言栈空
① c语言中如何初始化栈 每个元素均为空
<1>如果顺序栈的定义如下
typedef struct
{datatype data[stacksize];
int top;
}SeqStack;
---则置空栈的操作如下
void InitStack(seqstack *s)
{s->top=-1;
}
<2>如果链栈的定义如下
typedef struct node
{datatype data;
struct node *next;
}LinkStack;
---则置空栈的操作如下
void InitStack(linkstack *s)
{s->top=null;
}
② c语言版数据结构 空栈的构造
栈的本意是一个数组,里面存取数据的方式是先进后出。因此,你需要一个cusor来指定当前的栈顶(可能你使用top实现的),你可能还需要当前存放了多少数据进栈了,栈是否空、满,因此你还需要一个int变量计算栈元素个数。没push+1,没pop
-1。你完全不需要成员stacksize,还有你需要一个栈元素个数的计数器。另外你不需要将形参由引用该为指针,反而降低效率!
③ C语言中如何初始化栈 每个元素均为空
<1>如果顺序栈的定义如下
typedef
struct
{datatype
data[stacksize];
int
top;
}SeqStack;
---则置空栈的操作如下
void
InitStack(seqstack
*s)
{s->top=-1;
}
<2>如果链栈的定义如下
typedef
struct
node
{datatype
data;
struct
node
*next;
}LinkStack;
---则置空栈的操作如下
void
InitStack(linkstack
*s)
{s->top=null;
}
④ 用c语言可执行文件实现顺序栈的出栈、入栈、判栈空、判栈满!急求啊,谢谢各位朋友的帮助啊!!!!!!
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
栈定义
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef int Status;
出栈
Status Pop(SqStack *S,SElemType *e)
{
if((*S).top == (*S).base)
return ERROR;
*e = * --(*S).top;
return OK;
}
入栈
Status Push(SqStack *S,SElemType e)
{
if((*S).top - (*S).base >= (*S).stacksize)
{
(*S).base = (SElemType *)realloc((*S).base,
((*S).stacksize + STACKINCREMENT) * sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW);
(*S).top = (*S).base + (*S).stacksize;
(*S).stacksize += STACKINCREMENT;
}
*((*S).top)++ = e;
return OK;
}
判栈空
Status StackEmpty(SqStack S)
{
if(S.top == S.base) return TRUE;
else return FALSE;
}
判栈满
Status StackFull(SqStack S)
{
if(S.top - S.base >= S.stacksize)
return TRUE;
else return FALSE;
}
⑤ 数据结构 用C语言判断一个栈是否为空的算法
判断栈顶指针与栈底指针是否相等(是否指向同一个结点)。
如果相等则为空。
否则非空。
⑥ c语言版数据结构 空栈的构造
栈的本意是一个数组,里面存取数据的方式是先进后出。因此,你需要一个cusor来指定当前的栈顶(可能你使用top实现的),你可能还需要当前存放了多少数据进栈了,栈是否空、满,因此你还需要一个int变量计算栈元素个数。没push+1,没pop -1。你完全不需要成员stacksize,还有你需要一个栈元素个数的计数器。另外你不需要将形参由引用该为指针,反而降低效率!
⑦ c语言 栈的操作
#include
#include
#define Max 100
typedef char T;
typedef struct MyStack
{
T aa[Max];
unsigned int p;
} stack;
//创建空栈
stack* createEmptyStack()
{
stack* st = (stack *)malloc(sizeof(stack));
int i=0;
for(i=0;i<Max;i++)
st->aa[i]=0;
st->p=0;
return st;
};
//栈判空
int isEmpty(const stack* st)
{
if(st->p==0) return 1;
else return 0;
};
//求栈的大小
unsigned int size(const stack* st)
{
return st->p;
};
//push操作
void push(stack* st,const T a)
{
st->p=st->p+1;
if(st->p==Max)
{
printf("栈满\n");
st->p--;
return;
}
st->aa[st->p]=a;
};
//pop操作
T pop(stack* st)
{
if(isEmpty(st))
{
printf("栈空");
return NULL;
}
char t=st->aa[st->p];
st->p=st->p-1;
printf("%c ",t);
return t;
};
//栈销毁
void destroy(stack* st)
{
free(st);
};
int main()
{
stack* st = createEmptyStack();
if(isEmpty(st)) printf("MyStack is empty\n");
else printf("MyStack is not empty\n");
push(st,'a');
push(st,'b');
push(st,'c');
push(st,'d');
push(st,'e');
printf("%d\n",size(st));
while(!isEmpty(st)) pop(st);
destroy(st);
system("pause");
return 0;
}
⑧ c语言关于栈的问题
首先你题目没理解正确
(1)如果字符串中的应匹配的左括号和右括号不是同一类型,输出wrong
就是([123)这种应该输出wrong,而不是missing right
其次你的思路不太对,既然知道这题是考你栈结构的你就应该用栈解决啊,给你几个提示:
1、这题只用一个数组作为栈的物理空间就够了(当然还要有个char数组存放输入)
2、这题你用不着保存数字和右括号
3、绝大多数match以外的字符串不用扫描全就可以输出了,不然就算不WA可能要TO了
4、push pop peek这三种栈的操作都要用上
(算法思路,想独立完成就别看)
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
从左往右扫描字符串
遇到左括号压栈
遇到右括号去和栈顶匹配
栈已经空了没栈顶: miss left
匹配成功:弹出栈顶继续扫描
匹配不成功:wrong
遇到字符结尾
栈空了:match
否则:miss right
遇到其他数字啥的忽略掉
⑨ C语言构造空栈为什么要在S前加一个&
这里涉及到C/C++中函数调用时的参数传递。一般来说,都是值得传递,形参的值的改变不影响实参的值。
但在某些情况下,希望函数调用中的形参改变,实参也跟着改变。就像构造一个空栈,此时表示这个栈的数据结构刚被建立起来,原来栈不存在,现在被建立了,改变了,而按通常的方式是不行的。
C++提供了一种被称为引用的参数传递方式,就能实现形参改变实参也跟着改变的效果,也就是问题中说的前面加&的情况。
⑩ 栈的操作,用c语言急!
#include<stdio.h>
#include<malloc.h>
#define DataType int
#define MAXSIZE 1024
typedef struct
{
DataType data[MAXSIZE];
int top;
}SeqStack;
SeqStack *Init_SeqStack()//栈初始化
{
SeqStack *s;
s=(SeqStack *)malloc(sizeof(SeqStack));
if(!s)
{
printf("空间不足\n");
return NULL;
}
else
{
s->top=-1;
return s;
}
}
int Empty_SeqStack(SeqStack *s)//判栈空
{
if(s->top==-1)
return 1;
else
return 0;
}
int Push_SeqStack(SeqStack *s,DataType x)//入栈
{
if(s->top==MAXSIZE-1)
return 0;//栈满不能入栈
else
{
s->top++;
s->data[s->top]=x;
return 1;
}
}
int Pop_SeqStack(SeqStack *s,DataType *x)//出栈
{
if(Empty_SeqStack(s))
return 0;//栈空不能出栈
else
{
*x=s->data[s->top];
s->top--;
return 1;
}//栈顶元素存入*x,返回
}
DataType Top_SeqStack(SeqStack *s)//取栈顶元素
{
if(Empty_SeqStack(s))
return 0;//栈空
else
return s->data[s->top];
}
int Print_SeqStack(SeqStack *s)
{
int i;
printf("当前栈中的元素:\n");
for(i=s->top;i>=0;i--)
printf("%3d",s->data[i]);
printf("\n");
return 0;
}
int main()
{
SeqStack *L;
int n,num,m;
int i;
L=Init_SeqStack();
printf("初始化完成\n");
printf("栈空:%d\n",Empty_SeqStack(L));
printf("请输入入栈元素个数:\n");
scanf("%d",&n);
printf("请输入要入栈的%d个元素:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&num);
Push_SeqStack(L,num);
}
Print_SeqStack(L);
printf("栈顶元素:%d\n",Top_SeqStack(L));
printf("请输入要出栈的元素个数(不能超过%d个):\n",n);
scanf("%d",&n);
printf("依次出栈的%d个元素:\n",n);
for(i=0;i<n;i++)
{
Pop_SeqStack(L,&m);
printf("%3d",m);
}
printf("\n");
Print_SeqStack(L);
printf("栈顶元素:%d\n",Top_SeqStack(L));
return 0;
}