#include<iostream>
#include<cctype>
using namespace std;
/****预定义****/
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef char SElemType;
typedef int ElemType;
typedef int Status;
typedef struct Node* Position;
typedef struct Node* List;
typedef struct Node* QueuePtr;
typedef struct Node{
ElemType Date;
Position Next;
};//链表结构
typedef struct ListQueue{
QueuePtr rear;
QueuePtr LNode;
};//队列结构
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;//堆的结构体
typedef struct
{
SElemType *elem;
int length;
int listsize;
}SqList;//顺序表的结构体
/*******构建一个初始化的顺序表********/
Status initSqList(SqList &L)
{
L.elem = (SElemType*)malloc(LIST_INIT_SIZE * sizeof(SElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
/*******展示线性表的内容**********/
void Show_SqList(const SqList &L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
/*******构建一个初始化的栈*********/
Status initstack(SqStack &S)
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
/********将e元素压入栈内********/
Status Push(SqStack&S, const SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
/*********将栈顶删除并返回元素值********/
Status Pop(SqStack &S, SElemType &e)
{
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
/**********展示栈的内容************/
Status Show_S(const SqStack &S)
{
if (S.top == S.base)return ERROR;
SElemType* p = S.top;
do{
p--;
cout << *p << " ";
} while (p != S.
#include<cctype>
using namespace std;
/****预定义****/
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef char SElemType;
typedef int ElemType;
typedef int Status;
typedef struct Node* Position;
typedef struct Node* List;
typedef struct Node* QueuePtr;
typedef struct Node{
ElemType Date;
Position Next;
};//链表结构
typedef struct ListQueue{
QueuePtr rear;
QueuePtr LNode;
};//队列结构
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;//堆的结构体
typedef struct
{
SElemType *elem;
int length;
int listsize;
}SqList;//顺序表的结构体
/*******构建一个初始化的顺序表********/
Status initSqList(SqList &L)
{
L.elem = (SElemType*)malloc(LIST_INIT_SIZE * sizeof(SElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
/*******展示线性表的内容**********/
void Show_SqList(const SqList &L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
/*******构建一个初始化的栈*********/
Status initstack(SqStack &S)
{
S.base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
/********将e元素压入栈内********/
Status Push(SqStack&S, const SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType*)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
if (!S.base) exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}
/*********将栈顶删除并返回元素值********/
Status Pop(SqStack &S, SElemType &e)
{
if (S.top == S.base) return ERROR;
e = *--S.top;
return OK;
}
/**********展示栈的内容************/
Status Show_S(const SqStack &S)
{
if (S.top == S.base)return ERROR;
SElemType* p = S.top;
do{
p--;
cout << *p << " ";
} while (p != S.