- 论坛徽章:
- 0
|
本来用数组建栈更方便,但是我想写一个数组大小没有限制,data数据元素任何类型的通用栈,所以我这么做,下面是完整的程序
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct elementT
{
struct elementT *next;
void *data;
}element;
int push(element **stack, void *data)
{
element *elem = NULL;
elem = (element *)malloc(sizeof(element));
/*printf("stack address[%p,%p], elem address[%p], data[%c], data address[%p]\n",
stack, *stack, elem, *(char *)data, data); */
if(!elem)
{
return -1;
}
elem->data = data;
elem->next = *stack;
*stack = elem;
return 0;
}
int pop(element **stack, void **data)
{
element *elem;
if(!(elem = *stack))
{
return -1; /** the stack is null*/
}
*data = elem->data;
*stack = elem->next;
free(elem);
return 0;
}
int creat_stack(element **stack)
{
*stack = NULL;
return 0;
}
int delete_stack(element **stack)
{
element *elem;
while(!(*stack))
{
elem = (*stack)->next; /** not elem = *stack->next;*/
free(elem);
(*stack) = elem;
}
return 0;
}
int main(int argc, char *argv[])
{
char data_c[20] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
int data_i[20] = {1, 2, 3, 4, 5, 6, 7};
int i, ret=0;
element stack_char, stack_int, *stack_c, *stack_i;
char *p_c;
int *p_i;
creat_stack(&stack_c);
creat_stack(&stack_i);
for(i=0; i<7; i++)
{
ret = push(&stack_c, (void *)&data_c[i]);
if(ret)
{
printf("push element to stack_c error\n");
return -1;
}
ret = push(&stack_i, (void *)&data_i[i]);
if(ret)
{
printf("push element to stack_i error\n");
return -1;
}
}
for(i=0; i<7; i++)
{
ret = pop(&stack_c, (void **)&p_c);
if(ret)
{
printf("pop element to stack_c error\n");
return -1;
}
printf("pop stack_c element [%c]\n", *(char *)p_c);
}
for(i=0; i<7; i++)
{
ret = pop(&stack_i, (void **)&p_i);
if(ret)
{
printf("pop element to stack_i error\n");
return -1;
}
printf("pop stack_i element [%d]\n", *(int *)p_i);
}
}
|
|
|