#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <cstdlib>
#include <cstring>
#include <cstdio>
typedef struct _ELEMENT
{
int index;
char name[8];
_ELEMENT* next;
}ELEMENT;
typedef struct _STACK
{
int size;
ELEMENT* top;
}STACK;
//入栈
bool push(STACK* stack, ELEMENT element);
//出栈
bool pop(STACK* stack);
//ELEMENT* _pop(STACK* stack);
//元素数
int size(STACK stack);
//是否空栈
bool empty(STACK* stack);
//去头节点
ELEMENT* top(STACK stack);
//清空
void clear(STACK stack);
//打印
void show(STACK stack);
#include "Stack.h"
bool push(STACK* stack,ELEMENT element)
{
ELEMENT* node = (ELEMENT*)malloc(sizeof(ELEMENT));
memset(node,0,sizeof(ELEMENT));
node->index = element.index;
strcpy(node->name, element.name);
if (stack->top == NULL)
{
stack->top = node;
node->next = NULL;
return true;
}
else
{
node->next=stack->top;
stack->top = node;
return true;
}
}
bool pop(STACK* stack)
{
if (stack->top == NULL)
{
return true;
}
else
{
ELEMENT* p = NULL;
p = stack->top;
stack->top = stack->top->next;
//free(p);
}
return false;
}
int size(STACK stack)
{
for (ELEMENT* p = stack.top;p!=NULL; p=p->next)
{
stack.size++;
}
printf("%d",stack.size);
return stack.size;
}
bool empty(STACK* stack)
{
if (stack->top == NULL)
{
printf("no\n");
return true;
}
else
{
printf(" yes\n");
return true;
}
return false;
}
ELEMENT* top(STACK stack)
{
return stack.top;
}
void clear(STACK stack)
{
for (ELEMENT* p=stack.top;p!=NULL;p= stack.top)
{
stack.top = p->next;
free(p);
}
printf("%d", stack.top);
return;
}
void show(STACK stack)
{
for (ELEMENT*p = stack.top; p != NULL;p = p->next)
{
printf("%d %s\n",p->index,p->name);
}
return;
}
//ELEMENT* _pop(STACK* stack)
//{
// ELEMENT* p = stack->top;
// if (p != NULL)
// {
// stack->top = stack->top->next;
// stack->size--;
// return p;
// }
// return NULL;
//}
#include "Stack.h"
//void main()
//{
//STACK stack = { 0 };
//ELEMENT element = { 0 };
//strcpy(element.name, "张三");
//element.index = 5;
//ELEMENT element1 = { 0 };
//element1.index = 6;
//strcpy(element1.name, "李四 ");
//ELEMENT element2 = { 0 };
//strcpy(element2.name, "王五");
//element2.index = 3;
//push(&stack, element);
//push(&stack, element1);
//push(&stack, element2);
size(stack);
pop(&stack);
empty(&stack);
top(stack);
//show(stack);
//clear(stack);
//getchar();
//}
//字符串的截取
void interce(ELEMENT* element)
{
char src[] = { 0 };
char str[32] = { 0 };
char buffer[32] = { 0 };
gets_s(src);
char* p = strstr(src, ",");
if (p != NULL)
{
int len = p - src;
memcpy(str, src, len);
memcpy(buffer, p + 1, strlen(str) - len - 1);
strcpy(buffer, p + 1);
}
}
void main()
{
STACK stack = { 0 };
ELEMENT element = { 0 };
char arr[20] = { 0 };
strcpy(element.name, arr);
gets_s(arr);
if (arr[0] < '/' && arr[0] < ':')
{
}
strcpy(element.name, "arr");
element.index = atoi(arr);
push(&stack, element);
show(stack);
getchar();
}
//#define SHOW(f) \
//ELEMENT* p = _pop(stack); \
//ELEMENT* q = _pop(stack); \
//if (p == NULL){printf("表达式错误\n");return;}\
//if (q == NULL){printf("表达式错误\n");return;}\
//element.index = p->index ##f q->index; \
//printf("%d %s %d = %d\n", p->index, #f, q->index, element.index); \
//push(stack, element);
//void fun(STACK* stack, ELEMENT element, char* arrs)
//{
// if (strrchr(arrs, ' ') == NULL)
// {
// element.index = atoi(arrs);
// push(stack, element);
// return;
// }
// char* a = strrchr(arrs, ' ') + 1;
// if (strcmp(a, "+") == 0 || strcmp(a, "-") == 0 || strcmp(a, "*") == 0 || strcmp(a, "/") == 0) {
//
// }
// else {
// element.index = atoi(strrchr(arrs, ' ') + 1);
// }
// memset(strrchr(arrs, ' '), 0, 1);
// fun(stack, element, arrs);
// switch (*a)
// {
// case '+':
// {
// SHOW(+);
// break;
// }
// case '-':
// {
// SHOW(-);
// break;
// }
// case '*':
// {
// SHOW(*);
// break;
// }
// case '/':
// {
// SHOW(/ );
// break;
// }
// default:
// push(stack, element);
// break;
// }
//}
//#undef SHOW;
//void main() {
//
// /*ELEMENT elements1 = { 0 };
// elements1.index = 1;
// strcpy(elements1.name, "李四");
//
// ELEMENT elements2 = { 0 };
// elements2.index = 1;
// strcpy(elements2.name, "王五");
//
// push(&stack,elements);
// push(&stack, elements1);
// push(&stack, elements2);
// pop(&stack);
// pop(&stack);
//
// show(stack);*/
//
// STACK stack = { 0 };
// ELEMENT elements = { 0 };
// strcpy(elements.name, " ");
//
// char arrs[128] = { 0 };
// gets_s(arrs);
// //printf("%s\n",arrs);
// //printf("%s\n", arrs);
// //printf("%c\n",atoi("+"));
//
// fun(&stack, elements, arrs);
// show(stack);
//
// getchar();
//}