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 <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(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

Don‘t let shorts beat you, because it doesn‘t worth.

problem

make a queue for max elem, pop and push.(problem from beauty from programming)

require fast for getting max elem

my solution

two stacks can make true a queue.

sub-problem 

getting 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;
	}
};

ok, my solution for queue max elem follows

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()函数(用于临界资源程序段中发生终止动作后的资源清理任务,以免造成死锁,临界区资源一般上锁)

怎样用C语言写出对栈进行的五种运算:push()、pop()、top()、empty()、makempty()

C语言函数中返回数组

C语言 | 栈的图文解析和实现

C语言中,局部变量和全局变量的问题