- 论坛徽章:
- 0
|
- #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));
- 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->data);
- elem->next = NULL;
- 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(*stack);
- *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);
- }
- delete_stack(&stack_i);
- system("pause");
- }
复制代码 |
|