C语言 push和pop函数可以直接用吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 push和pop函数可以直接用吗?相关的知识,希望对你有一定的参考价值。
下面代码中,直接使用了push和pop函数,请问push和pop函数不需要自己定义吗?可以直接调用吗?
int Push(Stack *S, int item) /*将整数item压入栈顶*/
int Pop(Stack *S) /*栈顶元素出栈*/
*************************
函数 MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数 n 转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把 B 进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
#define KAXSIZE 32
typedef struct
int *elem; /* 栈的存储区 */
int max; /* 栈的容量,即找中最多能存放的元素个数 */
int top; /* 栈顶指针 */
Stack;
[C代码]
#define MAXSIZE 32
typedif struct
int *elem; /*栈的存储区*/
int max; /*栈的容量,即栈中最多能存放的元素个数*/
int top; /*栈顶指针*/
Stack;
[C代码]
int InitStack(Stack *S, int n) /*创建容量为n的空栈*/
S->elem = (int *)malloc(n * sizeof(int));
if(S->elem==NULL) return –1;
S->max=n;
__(1)__ =0;
return 0;
int Push(Stack *S, int item) /*将整数item压入栈顶*/
if(S->top==S->max)
printf(“Stack is full! \n”);
return –1;
__(2)__ = item;
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 ___(3)___ ;
void MultibaseOutput(long n,int B)
int m; Stack S;
if(InitStack(&S,MAXSIZE))
printf(“Failure!\n”);
return;
do
if (Push(&S,__ (4)__ ))
printf(“Failure!\n”);
return;
n= ___(5)___ ;
while(n!=0);
while(!StackEmpty(S)) /*输出B进制的数*/
m=Pop(&S);
if(m<10) printf(“%d”,m); /*小于10,输出数字*/
else printf(“%c”, m+55); /*大于或等于10,输出相应的字符*/
printf(“\n”);
#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(m<10) printf("%d",m); /*小于10,输出数字*/
else printf("%c", m+55); /*大于或等于10,输出相应的字符*/
printf("\\n");
追问
感谢啊,完整的代码你都有
追答调试了半天,耽误了时间。。。
参考技术A 自己定义的,如果是有库的话可以用库的函数追问那上面的代码为什么可以直接用?
追答int Push(Stack *S, int item) /*将整数item压入栈顶*/int Pop(Stack *S) /*栈顶元素出栈*/
//上面的是声明下面的是定义,你代码都提供了
int Pop(Stack *S) /*栈顶元素出栈*/
if(!S->top)
printf(“Pop an empty stack!\\n”);
return -1;
return ___(3)___ ;
参考技术B C 中需要自己定义实现。
C++ 中可以使用 STL 栈容器 stack 的 pop() 和 push()。追问
那上面的代码为什么可以直接用?
追答这不是让你补全么?
int Pop(Stack *S) /*栈顶元素出栈*/if(!S->top)
printf(“Pop an empty stack!\\n”);
return -1;
return ___(3)___ ;
追问
PUSH没有定义啊
感觉push那里的下面是定义,代码少了个号
queue for max elem, pop, push
queue for max elem, pop, push
个人信息:就读于燕大本科软件project专业 眼下大三;
本人博客:google搜索“cqs_2012”就可以;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
博客内容:queue for max elem, pop, push;
博客时间:2014-4-28;
编程语言:C++ ;
编程坏境:Windows 7 专业版 x64;
编程工具:vs2008 32位编译器;
制图工具:office 2010 ppt;
硬件信息:7G-3 笔记本;
my words
problemDon‘t let shorts beat you, because it doesn‘t worth.
my solutionmake a queue for max elem, pop and push.(problem from beauty from programming)
require fast for getting max elem
two stacks can make true a queue.
sub-problem
ok, my solution for queue max elem followsgetting max elem for the stack is so easy with dp.
my solution for my stack with max elem follows
name of type for elem is int
class Stack_mine { // assume: the data length is not so long, its length <= the max number of int int * data ; int length; int * table; public: // constructor function Stack_mine() { length = 0; data = new int[LENGTH]; table = new int[LENGTH]; } // function: pop int _pop() { if( ! _empty() ) { length--; return data[length]; } else { cout<<"pop error"<<endl; return -1; } } // function: return length int _length( ) { return length; } // function: push void _push(int a) { int * p1,*p2; if(length >= LENGTH) { p1 = (int *)realloc(data,LONGLENGTH * sizeof(int)); p2 = (int *)realloc(table,LONGLENGTH * sizeof(int)); data = p1; table = p2; } data[length] = a; if( length == 0 || data[ table[length-1] ] < a ) table[length] = length; else table[length] = table[length-1]; length ++; } // function: empty bool _empty() { if(length>0) return false; else return true; } // function: max int _max() { if(! _empty()) return data[ table[ length-1 ] ]; cout<<"error: empty stack for _max"<<endl; return -1; } };
class Queue_mine { Stack_mine s1; Stack_mine s2; public: Queue_mine(){}; // function: push void _push(int a) { s1._push(a); }; // function: pop int _pop() { if(s2._empty()) { while(!s1._empty()) { s2._push(s1._pop()); } } return s2._pop(); } // function: length int _length() { return s1._length() + s2._length(); } bool _empty() { if( s1._empty() && s2._empty() ) { return true ; } else return false ; } int _max() { if(! s1._empty() && ! s2._empty()) return ( s1._max() > s2._max() ? s1._max() : s2._max() ); else if( ! s1._empty() && s2._empty()) return s1._max(); else if( s1._empty() && ! s2._empty() ) return s2._max(); else { cout<<"empty for queue"<<endl; return -1; } } };
以上是关于C语言 push和pop函数可以直接用吗?的主要内容,如果未能解决你的问题,请参考以下文章
基于C语言堆栈push,pop,destroystack,isEmpty,isFull实现
C语言 pthread_cleanup_push()和pthread_cleanup_pop()函数(用于临界资源程序段中发生终止动作后的资源清理任务,以免造成死锁,临界区资源一般上锁)