level 10
堆栈指令中push和pop怎么实现 使用时提示未声明如何解
2013年11月12日 12点11分
1
level 9
可以用链表,优点无限栈长,缺点速度慢
也可以用数组,缺点栈长确定,优点速度快
具体实现你自己试试不是更好吗?
2013年11月12日 14点11分
4
而且我不会链表
2013年11月12日 16点11分
level 12
这神奇的函数似乎我从未用过,是C++的吧??不怎么了解
2013年11月12日 15点11分
5
其实是汇编的,哈哈水水
2013年11月12日 16点11分
神奇?。。。。。。。 ORZ。。。。。。。 那个你不使用栈的么
2013年11月12日 16点11分
@黑雪路西法 一般都自己动手实现的,没用过现成的函数→→
2013年11月13日 02点11分
@一周休七日 额,我是记着看算法时好像看到了的......
2013年11月13日 02点11分
level 10
那个 我的意思是将数据压入栈中的push和取出的pop啊 使用链表干嘛 我是想用栈的特性啊 后进先出
2013年11月12日 16点11分
6
链表用来做动态的栈啊,像数组就是静态的
2013年11月13日 02点11分
level 12
pop和push都是自己定义的,没定义的话肯定提示未声明。可以利用链表实现
typedef struct st {
int a;
struct st *next;
}stack;
//自己定义一个栈顶指针
stack *top=NULL;
void pushe(int i)
{
stack*p=(stack*)malloc(sizeof(stack));
//分配内存
p->a = i;
p->next = top;
top=p;
}
/*出栈*/
void pop()
{
if(!top)
return;
stack *temp = top;
top = top->next;
free(temp);
}
2013年11月12日 16点11分
7
ono 我表示。。。。。。。 谢谢 不过链表么 不懂
2013年11月12日 16点11分
似乎是搞什么每个节点结尾有指向下一个节点的指针即可
2013年11月12日 16点11分
还有 慢慢压进去 那么那个栈顶就成了栈底啊 用栈底不更好理解么
2013年11月12日 16点11分
哦不 我弄错了
2013年11月12日 16点11分
level 12
typedef struct stack{
int size;
char *top;
char *base;
}stack;
int init_stack(stack *stk)
{
stk->base=malloc(sizeof(char)*(stk->size));
if (stk->base)
{
stk->top = stk->base ;
return 1;
}
else return 0;
}
int push(stack *stk , char data )
{
if (((stk->top) - (stk->base)) < (stk->size))
{
if ((!((stk->top)-(stk->base)))&&(*(stk->top)))
{
*(stk->top)=data;
return 1;
}
else
{
(stk->top)++;
*(stk->top)=data;
return 1;
}
}
else return 0;
}
int pop(stack *stk)
{
if(!((stk->top) - (stk->base)))
{
*(stk->top)=0;
return 1;
}
else
{
*(stk->top)=0;
(stk->top)--;
return 1;
}
return 0;
}
char gettop(stack *stk)
{
return *(stk->top);
}
2013年11月12日 23点11分
9
level 10
#include <iostream>
using namespace std;
typedef struct stack
{
// 节点数据
int num;
// 节点指针
struct stack *pnext;
};
// 栈顶
stack *top = NULL;
void push(int i)
{
stack *p = (stack *) malloc(sizeof(stack));
p->num = i;
p->pnext = top;
top = p;
}
int pop()
{
if (top!=NULL)
{
return top->num;
}
stack * temp = top;
top = top->pnext;
free(temp);
}
int main()
{
int a;
for (int i = 0; i < 5; i++)
{
cin >> a;
push(a);
}
for (int i = 0; i < 5; i++)
{
cout << pop();
}
return 0;
}
2013年11月13日 02点11分
10
level 3
路过吐个槽,你说的这个是“栈”,不是“堆栈”。
谢谢。
2013年11月14日 15点11分
12
。。。。。你坑我。。
2013年11月18日 08点11分
level 9
C的话自己用数组实现,用链表是增加了复杂度了。C++的话直接用STL
2013年11月15日 11点11分
13
不啊 楼上不是有个人说了吗 而且你要用数组还要申请可变数组 很麻烦
2013年11月18日 08点11分
数组优点是方便 可是长度固定 而链表不太方便却是可以变化的 非常灵活
2013年11月18日 08点11分
回复 黑雪路西法 :本身链表就是一种数据据结构了,链表有链表的特点,栈有栈的特点。最好不要把两个揉到一起。如果用链表,随机访问一个元素复杂度是O(n),这就不符合栈的要求了
2013年11月19日 12点11分
回复 Fallenworlder :可是用数组实现啊 要申请可变数组么
2013年11月19日 13点11分