ADT堆栈的链表实现
2014-12-25 00:28
183 查看
堆栈,插入和删除只能在队列头进行。实现方式主要使用单向链表。
typedef struct stack_node_tag { struct stack_node_tag *next; int data; }stack_list_t; typedef stack_list_t stack_elem_t; typedef struct stack_tag { stack_list_t *head; int count; }stack_t; stack_t *stack_init(stack_t *s) { if( s == NULL ) { s = (stack_t *)malloc( sizeof(stack_t) ); s->head = NULL; s->count = 0; return s; } } int stack_destroy(stack_t *s) { if( s != NULL ) { stack_list_t *p = s->head; while( p != NULL ) { stack_list_t *t = p; p = p->next; free(t); } free(s); } } stack_elem_t *stack_elem_alloc( int n ) { stack_elem_t *t = (stack_elem_t *)malloc(sizeof(stack_elem_t)); t->data = n; t->next = NULL; return t; } void stack_push(stack_t *s, stack_elem_t *e) { assert( s!= NULL ); e->next = s->head; s->head = e; s->count++; } int stack_pop(stack_t *s) { assert( s!= NULL ); if( s->head != NULL ) { s->count--; if(s->count < 0) { s->count = 0; } stack_elem_t *t = s->head; s->head = s->head->next; int data = t->data; return data; } }
相关文章推荐
- 用无序链表实现字典ADT(C++描述)
- 分别用数组和链表实现堆栈(C语言版)
- 4.3 堆栈的链表实现
- 堆栈的链表实现
- 算法复习(5)链表实现的堆栈
- 用无序链表实现字典ADT(C++描述)
- 链表实现stack和queue,java实现(ADT思想)
- 分别用数组和链表实现堆栈(C语言版) - ahljjun的专栏 - 博客频道 - CSDN.NET
- 基于数组或链表的堆栈实现
- 基于链表实现堆栈
- 在用链表实现堆栈时遇到的问题
- C语言实现单链表之ADT定义
- 链表实现堆栈
- 不依赖堆栈的链表反转——java实现
- 用链表实现通用堆栈
- 用无序链表实现字典ADT(C++描述)
- 堆栈的两种实现形式:数组和链表
- 用双链表实现的堆栈和队列
- 堆栈的实现(LIFO、链表)
- 多项式ADT的链表实现