C语言实现的顺序栈

c语言实现的顺序栈包括一些基本操作

#include<stdio.h>
#include<stdlib.h>
//顺序栈
typedef struct book
{
	char name[10];
	float price;
 }book;
 typedef book Book;
 typedef struct Stack
 {
 	Book *data;
 	int top;
 }Stack;
 
 //初始化
 void InitStack(Stack *S)
 {
 	S->data=(Book*)malloc(sizeof(Book)); 
// 	S=(Stack*)malloc(sizeof(Stack));
 	if (!S->data)
 	{
 		printf("初始化失败!\n");
 		exit(1);
	}
	S->top=-1;
	printf("初始化成功!\n");
  } 
  
  //入栈 
  void Push(Stack *S,Book b)
  {
     S->top++;
	 S->data[S->top]=b; 
   } 
   
   //出栈 
   Book Pop(struct Stack *S)
   {
   	 Book b;
   	 b=S->data[S->top];
   	 S->top--;
   	 return b;
   } 
   
  //判断栈空
   void isEmpty(Stack *S)
   {
   	if (S->top==NULL)
   	{
   		printf("栈不存在!\n");
   		exit(1);
	}
   	if (S->top==-1)
   	{
   		printf("栈为空!\n");
	}
	printf("栈非空!\n");
   }
   
   //销毁
   void Destroy(Stack *S)
   {
   	 free(S->data);
   	 S->top=NULL;
   	 printf("成功销毁!\n");
   	 return;
	} 
   void main()
   {
   	int i,k;
   	Stack S,*p;
   	p=&S;
   	Book b;
   	InitStack(&S);
   	//Push两个元素 
    	for (i=0;i<2;i++)
    	{
	   	    printf("请输入书本的name和price:\n");
   	        scanf("%s%f",&b.name,&b.price);
   	        Push(&S,b);
    	} 
    //Pop全部元素 
    k=1;
        while (p->top!=-1)
		{
			Book b1=Pop(&S);
			printf("出栈的第%d个元素:name: %s ,price: %f \n",k++,b1.name,b1.price);
		 } 
		 Destroy(&S);
		 isEmpty(&S);
   }
posted @ 2021-04-15 18:06  云雨归海  阅读(284)  评论(0编辑  收藏  举报