线性表之栈的顺序存储实现

xiaoxiao2021-02-28  71

栈是一种受限制的线性表,说其受限制是因为它的 插入和删除只能在栈顶操作 栈的特性是 后进先出,所以也将栈称为后进先出( LIFO)表。           栈的顺序存储也称为线性栈,是利用一组地址连续的存储单元依次存放自栈底到栈顶的元素。用栈顶指针top来标识栈顶元素在顺序栈中的位置。 栈的结构体表示: typedef struct  {     int data[MAXNUM];       //存储数据的数组     int top;                //指向栈顶元素,在数组中相当下标 }seqstack; 插入元素操作: 需先将top指针指向栈顶上面的空位,然后再进行赋值。 void Push(seqstack *stack,int val) {     if(stack->top >= MAXNUM-1)     {         printf("栈已满!\n");         return ;     }     stack->top++;       //top指针先指向栈顶上面的空位     stack->data[stack->top] = val;//将数据元素入栈,成为新的栈顶元素 } 删除元素操作: 将top指针向下移动,指向新的栈顶元素 int Pop(seqstack *stack) {     if(!IsEmpty(stack))         return stack->data[stack->top--];   //弹出栈顶元素,并且栈顶指针向下一位     return 0;

}

顺序栈的C语言实现:(codeblocks完美运行)

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXNUM 100 typedef struct { int data[MAXNUM]; //存储数据的数组 int top ; //指向栈顶元素,在数组中相当下标 }seqstack; //初始化顺序栈 void Initstack(seqstack *stack) { memset(stack->data,0,MAXNUM); stack->top = -1; } //判断栈是否为空,是返回1,否则返回0 int IsEmpty(seqstack *stack) { if(stack->top == -1) return 1; else { return 0; } } //返回栈顶指针指向的元素 int Top(seqstack *stack) { if(!IsEmpty(stack)) return stack->data[stack->top]; return 0; } //出栈 int Pop(seqstack *stack) { if(!IsEmpty(stack)) return stack->data[stack->top--]; //弹出栈顶元素,并且栈顶指针向下一位 return 0; } //入栈 void Push(seqstack *stack,int val) { if(stack->top >= MAXNUM-1) { printf("栈已满!\n"); return ; } stack->top++; //top指针先指向栈顶上面的空位 stack->data[stack->top] = val;//将数据元素入栈,成为新的栈顶元素 } void destroy_stack(seqstack *stack) { if(!IsEmpty(stack)) free(stack); else { printf("栈已为空!\n"); return ; } } int main() { int i; srand((unsigned)time(0)); seqstack stack; //创建一个顺序栈 Initstack(&stack); for(i=0;i<30;i++) Push(&stack,rand()0); //创建30个0-99的随记数,并入栈 printf("栈顶元素为:%d\n",Top(&stack)); printf("打印栈顶元素:\n"); for(i=0;i<30;i++) { if(i%6 == 0) printf("\n"); printf("= ",Pop(&stack)); } printf("\n销毁栈!\n"); destroy_stack(&stack); return 0; } 运行界面:

转载请注明原文地址: https://www.6miu.com/read-39030.html

最新回复(0)