1。基本栈操作——出栈
如图:

出栈操作是当栈不为空时(注意必须进行清空操作),删除栈顶元素。 ,同时向下移动顶部和下一个光标。
代码可表示为:
Link_Stack *Pop_stack(Link_Stack *p){{ Node *temp; temp = p ->top; if (p->top == NULL) { 打印 f ("错误:堆栈为空"); else {p->顶部 = p->顶部->下一个; 免费(临时); p->count --; 返回 p; —堆栈转换相对来说比较复杂。由于栈的特殊性,它只允许在一端进行操作,所以我们的遍历操作总是逆序的。当堆栈不为空时,进程从顶部元素向下一次访问一个元素,直到指针指向零(即到达堆栈末尾)。 代码可表示为: int show_stack(Link_Stack *p){ 节点* 温度; { printf(""; ); 0; } 同时 (温度!= NULL) { printf (" %d\t", 临时->数据); temp = 临时->下一个; } "\n");返回0;} |
3。快速堆栈实现——矩阵堆栈 矩阵堆栈是一种更快的模拟堆栈的方式,所谓模拟,就是说我们不使用真正的链表,而是使用数组来进行“模拟操作”。这是一种模拟式的操作,可以快速帮助我们构建代码并分析流程,相应的实现也比较方便。 。 代码如下(独立分析请参见上文): #include#include#include # maxn 10000 typedef struct stack{ int 数据[最大。 ] ;int以上; }基金; stack *s= (堆栈 *)malloc(大小(堆栈)); if( s==NULL ) { printf("分配内存空间失败"); memset(s->数据,0,sizeof(s->数据)); s->top=0; 返回 s;} //推voidpush(stack *s,int ? //打开堆栈人口 s->data[s ->top]=0; s->top--; }}voidprint_stack(堆栈 *s){ for(int n=s ->top-1;n>=0 ;n--) { printf("%d\t",s->数据[n]); }printf( "\n"); } int main(){ stack *s=init(); int input [5]={11,22,33,44,55 }; 为了(inti=0;i |
|
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。