总的实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXSIZE 100
typedef char string[MAXSIZE];
typedef struct stu{
string name;
string id;
}ElemType;
typedef struct _stack{
ElemType* data;
int size;
int maxSize;
}STACK;
// 链表节点
typedef struct Node {
ElemType data;
struct Node* next;
}Node;
// 栈结构
typedef struct {
Node* Head;
int Size;
}Stack;
// 初始化栈
void InitStack(Stack* stack)
{
stack->Head = (Node *)malloc(sizeof(Node));
if(stack->Head == NULL)
return;
stack->Head->next = NULL;
stack->Size = 0;
}
// 判断栈是否为空
bool Empty(Stack* stack)
{
return stack->Size == 0;
}
// 入栈
void Push(Stack* stack, ElemType item)
{
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL)
{
return;
}
newNode->data = item;
newNode->next = stack->Head->next;
stack->Head->next = newNode;
++stack->Size;
}
// 出栈
int Pop(Stack* stack)
{
if (Empty(stack))
{
return -1; // 或者其他错误值
}
Node* temp = stack->Head->next;
stack->Head->next = temp->next;
stack->Size--;
free(temp);
return 1;
}
// 查看栈顶元素
ElemType* Top(Stack* stack)
{
if (Empty(stack))
{
return NULL; // 或者其他错误值
}
return &(stack->Head->next->data);
}
int Size(Stack *stack)
{
return stack->Size;
}
void Free(Stack *stack)
{
while(stack->Size)
{
Pop(stack);
}
free(stack->Head);
stack->Head = NULL;
}
int main()
{
Stack stack;
InitStack(&stack);
ElemType arr[20] = {
{"张三", "0x001"},
{"李四", "0x002"}
};
Push(&stack, arr[0]);
Push(&stack, arr[1]);
ElemType e = *(Top(&stack));
printf("栈顶元素为:%s %s\n", e.name, e.id);
printf("栈中元素个数为:%d\n", Size(&stack));
Pop(&stack);
printf("栈中元素个数为:%d\n", Size(&stack));
e = *(Top(&stack));
printf("栈顶元素为:%s %s\n", e.name, e.id);
if(Empty(&stack))
{
printf("栈空\n");
}
else
{
printf("栈非空\n");
}
Free(&stack);
return 0;
}
没有回复内容