//**********************************************************
//队列的顺序存储,简单从栈的顺序存储进行修改;
// 2019.8.5 by finer
//**********************************************************
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1024
typedef struct SEQSTACK
{
void* data[MAXSIZE];
int size;
}SeqStack;
typedef struct STUDENT
{
char name[64];
int age;
int score;
} student;
//栈初始化;
SeqStack* Init_SeqStack()
{
SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
stack->size = 0;
return stack;
}
//入栈
void pushBack_SeqStack(SeqStack* stack, void* data)
{
if (stack == NULL)
return;
if (data == NULL)
return;
stack->data[stack->size] = data;
stack->size++;
}
//返回栈顶元素;
void* top_SeqStack(SeqStack* stack)
{
if (stack == NULL)
return NULL;
return stack->data[stack->size - 1];
}
//出栈
void* pop_SeqStack(SeqStack* stack)
{
//for (int i = stack->size - 1; i >= 0; --i)
if (stack == NULL)
return NULL;
if (stack->size == 0)
return NULL;
//stack->size--;
//return stack->data[stack->size];
void* data = stack->data[0];
for (int i = 0; i < stack->size-2; ++i)
{
stack->data[0] = stack->data[i + 1];
}
return data;
}
void destorySpace_SeqStack(SeqStack* stack)
{
if (stack != NULL)
{
free(stack);
stack = NULL;
}
}
int main()
{
SeqStack* stack = Init_SeqStack();
student sd1 = { "zhang3", 23, 80 };
student sd2 = { "zhang4", 18, 100 };
student sd3 = { "zhang5", 20, 90 };
printf("---------测试入栈-----------\n");
pushBack_SeqStack(stack, &sd1);
pushBack_SeqStack(stack, &sd2);
pushBack_SeqStack(stack, &sd3);
student* testSd = pop_SeqStack(stack);
printf("---------测试出栈-----------\n");
printf("我叫%s,今年%d岁了,考了%d分\n", testSd->name, testSd->age, testSd->score);
student* testSd2 = pop_SeqStack(stack);
printf("我叫%s,今年%d岁了,考了%d分\n", testSd2->name, testSd2->age, testSd2->score);
printf("---------测试返回栈顶-----------\n");
student* testSd3 = top_SeqStack(stack);
printf("我叫%s,今年%d岁了,考了%d分\n", testSd3->name, testSd3->age, testSd3->score);
destorySpace_SeqStack(stack);
system("pause");
return 0;
}