线性栈
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define max 51
#define initSize 100
struct People
{
char name[max];
char ID[max];
};
typedef struct
{
People* people;
int top;
}Stack;
void initStack(Stack &stack);
bool stackEmpty(Stack stack);
bool stackFull(Stack stack);
bool push(Stack &stack, People peo);
bool pop(Stack &stack ,People& peo);
People getPop(Stack &stack);
void printPeo(People peo);
void main()
{
Stack stack;
initStack(stack);
People peo[4] = { {"李参政" , "0418"} , { "参政" ,"0418"} , {"政" ,"0418"} ,{"李" ,"0418"} };
for (int i = 0; i < 4; i++)
{
push(stack, peo[i]);
}
for (int i = 0; i < 4; i++)
{
People peo;
pop(stack, peo);
printf("%d --------\n" , 3-i);
printPeo(peo);
}
free(stack.people);
}
void initStack(Stack& stack)
{
stack.people = (People*)malloc(sizeof(People) * initSize);
stack.top = 0;
}
bool stackEmpty(Stack stack)
{
if (stack.top == 0)
return true;
else
return false;
}
bool stackFull(Stack stack)
{
if (stack.top >= initSize)
return true;
else
return false;
}
bool push(Stack& stack, People peo)
{
if (stackFull(stack))
return false;
int top = stack.top;
stack.people[top] = peo;
++stack.top;
return true;
}
bool pop(Stack& stack , People &peo)
{
if (stackEmpty(stack))
return false;
else
{
--stack.top;
int top = stack.top;
peo = stack.people[top];
}
return true;
}
People getPop(Stack& stack)
{
if (!stackEmpty(stack))
{
int i = stack.top - 1;
return stack.people[i];
}
}
void printPeo(People peo)
{
printf("name = %s\n", peo.name);
printf("ID = %s\n", peo.ID);
printf("-------------------------------\n");
}
链栈
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define max 51
#define initSize 100
struct People
{
char name[max];
char ID[max];
};
typedef struct LNode
{
People people;
struct LNode *next;
}LNode , *linkStack;
People peo = { "栈底" ,"栈底" };
void initStack(linkStack& stack);
bool stackEmpty(linkStack stack);
bool push(linkStack& stack, People peo);
bool pop(linkStack& stack, People& peo);
People getPop(linkStack stack);
bool destroy(linkStack& stack);
void printPeo(People peo);
void main()
{
linkStack stack;
initStack(stack);
People peo[4] = { {"李参政" , "0418"} , { "参政" ,"0418"} , {"政" ,"0418"} ,{"李" ,"0418"} };
for (int i = 0; i < 4; i++)
push(stack, peo[i]);
for (int i = 0; i < 4; i++)
{
People peo;
pop(stack , peo);
printPeo(peo);
}
destroy(stack);
}
void initStack(linkStack& stack)
{
LNode* stackBottom = (LNode*)malloc(sizeof(LNode));
stackBottom->next = NULL;
stack = (linkStack)malloc(sizeof(LNode));
stack->next = stackBottom;
}
bool stackEmpty(linkStack stack)
{
if (stack->next->next == NULL)
return true;
return false;
}
bool push(linkStack& stack, People peo)
{
LNode* newpeo = (LNode*)malloc(sizeof(LNode));
newpeo->people = peo;
newpeo->next = stack->next;
stack->next = newpeo;
return true;
}
bool pop(linkStack& stack , People &people)
{
LNode* peo = stack->next;
people = peo->people;
stack->next = peo->next;
free(peo);
return true;
}
People getPop(linkStack stack)
{
People peo = stack->next->people;
return peo;
}
bool destroy(linkStack& stack)
{
if (stackEmpty(stack))
{
free(stack->next);
free(stack);
return true;
}
return false;
}
void printPeo(People peo)
{
printf("name = %s\n", peo.name);
printf("ID = %s\n", peo.ID);
printf("-------------------------------\n");
}