首页 > 代码库 > 对栈的操作和算法实现
对栈的操作和算法实现
一、栈的定义
从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作都是线性操作的子集,它是操作受限的线性表。
栈(stack)是限定仅在表尾进行插入或删除操作的线性表。
栈一般分为两种:
静态栈:用数组实现;
动态栈:用链表实现。
一般用的比较多的都是动态栈。如果学会了链表,其实对栈的操作就比较简单了。
二、栈的结构
空栈的结构:(其实就是栈顶和栈顶都指向一个不存放有效数据的头结点)
存有结点的栈结构:(栈顶指针指向栈顶结点,栈底指针指向头结点)
三、用C语言实现
/* 2016年9月17日11:35:35 栈的操作和算法 */ #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Node { int data; //数据域 struct Node * pNext; //指针域 } NODE, * PNODE; typedef struct Stack { PNODE pTop; //栈顶 PNODE pBottom; //栈底 } STACK, * PSTACK; //函数声明 void init_stack(PSTACK pS); //初始化栈 void push_stack(PSTACK pS, int val); void traverse_stack(PSTACK pS); bool is_empty(PSTACK pS); bool pop_stack(PSTACK pS, int * pVal); void clear_stack(PSTACK pS); int main(void) { STACK S; int val; init_stack(&S); push_stack(&S, 1); push_stack(&S, 2); push_stack(&S, 3); push_stack(&S, 4); push_stack(&S, 5); traverse_stack(&S); clear_stack(&S); traverse_stack(&S); /* if(pop_stack(&S, &val)) { printf("出栈成功,出栈的值为:%d\n",val); } else { printf("出栈失败,栈为空!\n"); } traverse_stack(&S); */ return 0; } void init_stack(PSTACK pS) //初始化栈 { PNODE pNew = (PNODE)malloc(sizeof(NODE)); //造出一个栈的头结点 if(NULL == pNew) { printf("内存分配失败,程序终止!\n"); exit(-1); } pS->pTop = pNew; pS->pBottom = pS->pTop; pNew->pNext = NULL; } void push_stack(PSTACK pS, int val) //压栈 { PNODE pNew = (PNODE)malloc(sizeof(NODE)); if(NULL == pNew) { printf("内存分配失败,程序终止!\n"); exit(-1); } pNew->data = http://www.mamicode.com/val;" %d \n", p->data); p = p->pNext; } printf("\n"); return; } bool is_empty(PSTACK pS) //判断是否为空 { if(pS->pTop == pS->pBottom) return true; else return false; } bool pop_stack(PSTACK pS, int * pVal) //出栈 { if(is_empty(pS)) //先判断是否为空 { return false; } else { PNODE p = pS->pTop; *pVal = p->data; pS->pTop = p->pNext; free(p); p = NULL; return true; } } void clear_stack(PSTACK pS) //清空栈 { PNODE p, q; p = pS->pTop; q = NULL; while(pS->pBottom != p) { q = p->pNext; free(p); p = q; } pS->pTop = pS->pBottom; return; }
对栈的操作和算法实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。