
正文
C语言堆栈pop函数 c语言 函数调用 堆栈
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
基于C语言堆栈push,pop,destroystack,isEmpty,isFull实现
以下代码是基于C语言写的堆栈的压栈,出栈,清栈,读栈指针等方法,在Visual studio 中,可直接使用,供学习者参考学习。
#include
#include
#include
#include
#include
#include
#define MAX_SIZE 100
typedef struct Stack
{
char *data;
int size;
int top;
};
void initStack(Stack *s); //init stack
void destroyStack(Stack *s);
bool push(Stack *s,char ch);
char pop(Stack *s);
char gettop(Stack *s);
bool isEmpty(Stack *s);
bool isFull(Stack *s);
void setNull(Stack *s);
#endif
void initStack(Stack *s)
{
s-data = (char*)malloc(MAX_SIZE * sizeof(char)); //分配最大内存空间
if (!s-data)
exit(OVERFLOW); //提前终止程序
s-size = MAX_SIZE;
s-top = -1;
}
void destroyStack(Stack *s)
{
free(s-data);
}
bool push(Stack *s, char ch)
{
if ((s-top + 1) != s-size)
{
s-data[++s-top] = ch;
return true;
}
else
return false;
}
char pop(Stack *s)
{
if (s-top != -1)
return s-data[s-top--];
}
char gettop(Stack *s)
{
return s-data[s-top];
}
bool isEmpty(Stack *s)
{
if (s-top == -1)
return true;
else
return false;
}
bool isFull(Stack *s)
{
if ((s-top + 1) == s-size)
return true;
else
return false;
}
void setNull(Stack *s)
{
s-top = -1;
}
int main()
{
char chd;
bool c;
Stack s1;
initStack(s1);
c = push(s1, 'a');
printf("Stack s1 push status is %d,s.data is %c,top value is %d ", c,s1.data[s1.top],s1.top);
c = push(s1, 'b');
printf("Stack s1 push status is %d,s.data is %c,top value is %d ", c, s1.data[s1.top], s1.top);
chd = gettop(s1);
printf("Stack s1-top data:%c,top value is %d ", chd, s1.top);
chd = pop(s1);
printf("Stack 弹出 data:%c,top value is %d ", chd, s1.top);
chd = pop(s1);
printf("Stack 弹出 data:%c,top value is %d ", chd, s1.top);
c = isEmpty(s1);
printf("Stack s1 c bool:%d,top value is %d ", c, s1.top);
c = isFull(s1);
printf("Stack s1 c bool:%d,top value is %d ", c, s1.top);
return 0;
}
相关问答
Q1: C语言写Pop函数取栈的出错
Pop函数改成这样:
int Pop (Stack * pstack, int * pname)
{
if(pstack-top=0)
{
return 0;
}
pstack-top--;
* pname = pstack-data[pstack-top];
return 1;
}
Push函数改成这样:
int Push (Stack * pstack, int num)
{
if(pstack-top=Stack_size)
{
printf("Push Error!");
return 0;
}
pstack-data[pstack-top]=num;
pstack-top++;
return 0;
}
试试(原来那样当元素达到最大数目时pstack-top就越界了)。
Q2: C语言 出栈操作Pop(struct SqStack * MyStack, ElemType *e
#include stdio.h
#include conio.h
#include stdlib.h
#define elemType int /* 链栈元素数据类型 */
#define SNODE_SIZE sizeof (struct sNode) /* 链栈结点空间大小 */
#define status int /* 状态型变量 */
#define OVERFLOW -1 /* 内存溢出状态码 */
#define ERROR 0 /* 错误状态码 */
#define OK 1 /* 正确状态码 */
/* 链栈结点存储结构 */
typedef struct sNode {
elemType data;
struct sNode *next;
} sNode, *sNodePtr;
/* 链栈存储结构 */
typedef struct linkStack {
sNodePtr top; /* 栈顶指针 */
} linkStack;
/* 初始化 */
/* 操作结果:构造一个带头结点的空链栈S */
void initStack (linkStack *S) {
S-top = (sNodePtr) malloc (SNODE_SIZE); /* 产生头结点,栈顶指针指向此头结点 */
if (!S-top) /* 内存分配失败 */
exit (OVERFLOW);
S-top-next = NULL;
}
/* 销毁 */
/* 初始条件:链栈S已存在。操作结果:销毁链栈S */
void destroyStack (linkStack *S) {
sNodePtr p, q;
p = S-top; /* p指向S的头结点 */
while (p) {
q = p-next; /* q指向p的下一个结点 */
free (p); /* 回收p指向的结点 */
p = q; /* p移动到下一个结点 */
} /* 直到没有下一个结点 */
}
/* 判断链栈是否为空 */
/* 初始条件:链栈S已存在。操作结果:若S为空链栈,则返回TRUE,否则返回FALSE */
status stackIsEmpty (linkStack *S) {
return S-top-next == NULL;
}
/* 入栈 */
/* 操作结果:在S的栈顶插入新的元素e */
status push (linkStack *S, elemType e) {
sNodePtr p;
p = (sNodePtr) malloc (SNODE_SIZE); /* 产生新结点 */
if (!p) /* 内存分配失败 */
exit (OVERFLOW);
p-data = e;
p-next = S-top-next; /* 将新结点链接到原栈顶 */
S-top-next = p; /* 栈顶指向新结点 */
}
/* 出栈 */
/* 操作结果:删除S的栈顶元素,并由e返回其值 */
status pop (linkStack *S, elemType *e) {
sNodePtr p;
if (stackIsEmpty (S))
return ERROR;
p = S-top-next; /* p指向链栈的第一个结点 */
*e = p-data; /* 取出数据 */
S-top-next = p-next;
free (p); /* 删除该结点 */
if (S-top == p) /* 栈为空 */
S-top-next = NULL;
return OK;
}
/* 打印栈内容 */
/* 初始条件:链栈S已存在。操作结果:当栈不为空时,打印栈内容并返回OK,否则返回ERROR */
status printStack (linkStack *S) {
sNodePtr p;
if (stackIsEmpty (S)) {
puts ("The stack is empty! ");
return ERROR;
}
p = S-top-next;
while (p) {
printf ("%d\t", p-data);
p = p-next;
}
putchar ('\n');
return OK;
}
int main (void) {
linkStack S;
elemType e;
elemType a, b, c, d;
a = 1; b = 2; c = 3; d = 4;
initStack (S);
push (S, a);
push (S, b);
push (S, c);
push (S, d);
puts ("Push 4 elements");
printf ("S:\t");
printStack (S);
putchar ('\n');
pop (S, e);
puts ("Pop 1 element");
printf ("S:\t");
printStack (S);
destroyStack (S);
getch (); /* 屏幕暂留 */
return 0;
}
如有问题,可以点击头像联系我
Q3: C语言中的pop函数是什么单词的缩写
关于 pop 函数,我不太确定题主说的是哪个函数,因为 C 语言的标准函数库是没有 pop 这个函数的。如果题主说的是 C++ 的 Stack 类中的 pop 函数的话,它并不是一个缩写,因为从栈中取值的操作就叫做 pop。
然后就是查询单词原型的网站,因为 C 语言好多函数库中的函数名都是按照很奇怪的方法缩写的,所以基本上没有一个专门查全称的网站。不过题主可以参考
这个网站里面虽然没有指出具体的缩写方式,但是能很好地解释 C 语言标准函数库的所有函数的作用。通过它的介绍你应该会对函数的全称有一个大概的理解。比如说这个针对 stdio.h 头文件中所定义函数的解释:
不光是 C 语言,C++ 的标准类库的信息也可以在这个网站中找到。
Q4: c语言,pop函数和push函数的作用分别是什么?请详细一点,谢谢。我是初学者~
pop函数 出栈 ;push函数 进栈。
相当于有一个箱子,push函数是把东西放进去;而pop函数则相反,是把东西从那箱子里拿出来。
Q5: C语言 push和pop函数可以直接用吗?
#include stdio.h
#include stdlib.h
#define MAXSIZE 32
typedef struct{
int *elem;/* 栈的存储区 */
int max; /* 栈的容量,即找中最多能存放的元素个数 */
int top; /* 栈顶指针 */
}Stack;
int InitStack(Stack *S, int n) /*创建容量为n的空栈*/
{
S-elem = (int *)malloc(n * sizeof(int));
if(S-elem==NULL) return -1;
S-max=n;
S-top =0; //栈顶初值0
return 0;
}
int Push(Stack *S, int item) /*将整数item压入栈顶*/
{
if(S-top==S-max) {
printf("Stack is full! \n");
return -1;
}
S-elem[S-top++] = item; //压栈,栈顶加1
return 0;
}
int StackEmpty(Stack S)
{
return (!S.top)?1:0; /*判断栈是否为空*/
}
int Pop(Stack *S) /*栈顶元素出栈*/
{
if(!S-top) {
printf("Pop an empty stack!\n");
return -1;
}
return S-elem[--S-top] ; //弹出栈,栈顶减1
}
void MultibaseOutput(long n,int B)
{
int m; Stack S;
if(InitStack(S,MAXSIZE)){
printf("Failure!\n");
return;
}
do {
if (Push(S,B )) //------
{
printf("Failure!\n");
return;
}
n= n-1 ; //--------
}while(n!=0);
while(!StackEmpty(S)) { /*输出B进制的数*/
m=Pop(S);
if(m10) printf("%d",m); /*小于10,输出数字*/
else printf("%c", m+55); /*大于或等于10,输出相应的字符*/
}
printf("\n");
}
C语言堆栈pop函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言 函数调用 堆栈、C语言堆栈pop函数的信息别忘了在本站进行查找喔。







