C语言怎么用指针实现栈

Cokemark 2011-12-02 04:20:52

/*
* stack.c
*
* Created on: 2011-12-2
* Author: root
*/
#include<stdio.h>
#include<stdlib.h>
#define N 5
//push pop top empty full clear size
typedef int T;
typedef struct {
T *base;
T *top;
int n;
} Stack;

void p_stackinit(Stack* p) {
p->base = malloc(sizeof(T)*N);
p->top=p->base;
}

int p_stackfull(Stack *p) {
return p->n==N-1;
}

int p_stackempty(Stack *p) {
return p->n==0;
}

void p_stackpush(Stack* p, T d) {
if(p_stackfull(p)){
printf("stack is full!\n");
return;
}
printf("d=%d\n",d);
*p->top++=d;
++p->n;
printf("%d\t\n",*p->top);
}

void p_stackpop(Stack* p) {
if(p_stackempty(p)){
printf("stack is empty~!\n");
return;
}
T *q=p->top;
free(p->top);
p->top=--q;
--p->n;
}

T p_stacktop(Stack* p) {
if(p_stackempty(p)){
printf("stack is empty~!\n");
return -1;
}
return *(p->top);
}

void p_stackclear(Stack *p) {
T *q=p->top;
while(p->n!=0){
free(p->top);
p->top=--q;
--p->n;
}
}

T p_stacksize(Stack *p) {
return p->n;
}

int main() {
Stack s1;
p_stackinit(&s1);
printf("test1\n");
int i;
for (i = 0; i < N; ++i) {
p_stackpush(&s1, i * 5);
printf("test2\n");
}
printf("size=%d\n", p_stacksize(&s1));
printf("size=%d\n", p_stacksize(&s1));
while (!p_stackempty(&s1)) {
T t = p_stacktop(&s1);
printf("%d ", t);
p_stackpop(&s1);
}
printf("\n");
p_stackpop(&s1);

return 0;
}

不知道错哪儿了,求大家指教(或者给一个参考的例子也行),谢谢了!
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cokemark 2011-12-02
  • 打赏
  • 举报
回复
自己解决了,哈哈
liru125504 2011-12-02
  • 打赏
  • 举报
回复
应该打印*(--(p->top)),因为*p->top++=d;语句执行完之后p->top指针向后+1
Cokemark 2011-12-02
  • 打赏
  • 举报
回复

void p_stackpush(Stack* p, T d) {
if(p_stackfull(p)){
printf("stack is full!\n");
return;
}
printf("d=%d\n",d);
*p->top++=d;
++p->n;
printf("%d\t\n",*p->top);
}

此处为什么没有将d的值赋给*p->top?????
lancerEx 2011-12-02
  • 打赏
  • 举报
回复

while (!p_stackempty(&s1)) {
T t = p_stacktop(&s1);
printf("%d ", t);
p_stackpop(&s1);
}


这里没有循环退出条件


void p_stackpop(Stack* p) {
if(p_stackempty(p)){
printf("stack is empty~!\n");
return;
}
T *q=p->top;
free(p->top); //释放空指针 段错误
p->top=--q;
--p->n;
}


69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧