使用数组模拟顺序栈。栈底为数组的首地址,栈顶为数组的尾地址,因为数组中尾插不需要一个一个移动数据,相比头插效率更高。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1024
struct SStack {
void* data[MAX];
int m_size;
};
typedef void* seqStack;
seqStack init_SStack() {
struct SStack* myStack = malloc(sizeof(struct SStack));
if (myStack == NULL)
return NULL;
myStack->m_size = 0;
memset(myStack->data, 0, sizeof(void*) * MAX);
return myStack;
}
void push_Stack(seqStack stack, void * data) {
if (stack == NULL || data == NULL)
return;
struct SStack* myStack = stack;
if (myStack->m_size == MAX)
return;
myStack->data[myStack->m_size] = data;
myStack->m_size++;
}
void pop_SStack(seqStack stack) {
if (stack == NULL)
return;
struct SStack* myStack = stack;
if (myStack->m_size == 0)
return;
myStack->data[myStack->m_size - 1] = NULL;
myStack->m_size--;
}
void* get_topValue(seqStack stack) {
if (stack == NULL)
return NULL;
struct SStack* myStack = stack;
if (myStack->m_size == 0)
return NULL;
return myStack->data[myStack->m_size - 1];
}
int size_SStack(seqStack stack) {
if (stack == NULL)
return -1;
struct SStack* myStack = stack;
return myStack->m_size;
}
int isEmpty_SStack(seqStack stack) {
if (stack == NULL)
return -1;
struct SStack* myStack = stack;
if (myStack->m_size == 0)
return 1;
return 0;
}
void destroy_SStack(seqStack stack) {
if (stack == NULL)
return;
free(stack);
stack = NULL;
}
typedef struct Person {
char name[64];
int age;
}Person;
void test() {
Person p1 = { "bobo",23 };
Person p2 = { "toto",24 };
Person p3 = { "gogo",25 };
Person p4 = { "yoyo",26 };
seqStack myStack = init_SStack();
push_Stack(myStack, &p1);
push_Stack(myStack, &p2);
push_Stack(myStack, &p3);
push_Stack(myStack, &p4);
Person *p = get_topValue(myStack);
printf("%s,%d\n", p->name, p->age);
pop_SStack(myStack);
p = get_topValue(myStack);
printf("%s,%d\n", p->name, p->age);
int ret = size_SStack(myStack);
printf("栈的大小为:%d\n", ret);
if (!isEmpty_SStack(myStack)) {
printf("栈内有元素\n");
}
destroy_SStack(myStack);
myStack = NULL;
}
int main()
{
test();
system("pause");
return EXIT_SUCCESS;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)