69,371
社区成员
发帖
与我相关
我的任务
分享
/*
* 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;
}
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);
}
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;
}