//SeqStack.h
</pre><pre name="code" class="cpp">/* stack:Last In First Out */ //1.定义顺序栈的结构 typedef struct stack { DATA data[SIZE+1]; int top; //栈顶 }SeqStack; //2.初始化栈 SeqStack *SeqStackInit() { SeqStack *p; if(p=(SeqStack *)malloc(sizeof(SeqStack))) { p->top=0; //设置栈顶为0 return p; //返回指向栈顶的指针 } return NULL; } //释放申请的内存 void SeqStackFree(SeqStack *s) { if(s) free (s); } //3.判断栈的状态 int SeqStackIsEmpty(SeqStack *s) //判断栈是否为空 { return (s->top==0); } void SeqStackClear(SeqStack *s) //清空栈 { s->top=0; } int SeqStackIsFull(SeqStack *s) //判断栈是否已满 { return (s->top==SIZE); } //4.入栈操作 int SeqStackPush(SeqStack *s,DATA data) { if((s->top+1)>SIZE) //栈顶上一个位置超过最大容量 { printf("栈溢出\n"); return 0; } s->data[++s->top]=data; return 1; } //5.出栈操作 DATA SeqStackPop(SeqStack *s) { if(s->top==0) //判断栈是否为空 { printf("栈为空\n"); exit(0); } return (s->data[s->top--]); } //6.获取栈顶元素 DATA SeqStackPeek(SeqStack *s) { if(s->top==0) //判断栈是否为空 { printf("栈为空\n"); exit(0); } return (s->data[s->top]); }
//SeqStackTest.c
#include <stdio.h> #include <stdlib.h> #define SIZE 50 typedef struct { char name[15]; int age; }DATA; #include "SeqStack.h" int main(int argc, char *argv[]) { SeqStack *stack; DATA data,data1; stack = SeqStackInit(); printf("入栈操作:\n"); printf("输入3组姓名 年龄进行入栈操作:\n"); int i; for(i=0;i<3;i++) { scanf("%s%d",data.name,&data.age); SeqStackPush(stack,data); } printf("出栈操作:\n"); for (i = 0; i < 3; ++i) { data1=SeqStackPop(stack); printf("出栈的数据是(%s,%d)\n",data1.name,data1.age); } SeqStackFree(stack); return 0; }
//该程序测试结果
入栈操作: 输入3组姓名 年龄进行入栈操作: xxx 21 ccc 20 bbb 19 出栈操作: 出栈的数据是(bbb,19) 出栈的数据是(ccc,20) 出栈的数据是(xxx,21) -------------------------------- Process exited with return value 0 Press any key to continue . . .
时间: 2024-12-05 05:17:19