typedef struct SNode {
int data;
SNode *next;
}SNode;
typedef struct LStack {
SNode *top;
}LStack;
void initLStack(LStack &S) {
S.top = new SNode;
S.top->data = NULL;
S.top->next = NULL;
return;
}
bool isEmptyLStack(LStack S) {
if (S.top->next)
return false;
else
return true;
}
void pushLStack(LStack &S,int e) {
SNode* newNode = new SNode;
newNode->data = e;
newNode->next = S.top->next;
S.top->next = newNode;
S.top->data++;
return;
}
void setLStack(LStack &S) {
int i;
while (cin >> i) {
if (i == '#')break;
pushLStack(S, (int)i);
}
return;
}
int popLStack(LStack &S) {
int e;
if (isEmptyLStack(S)) {
cout << "Error: empty pop!" << endl;
e = NULL;
return e;
}
SNode* delNode = S.top->next;
S.top->next = delNode->next;
e = delNode->data;
delete delNode;
S.top->data--;
return e;
}
int getLStackSize(LStack S) {
return S.top->data;
}
void showLStack(LStack S) {
if (isEmptyLStack(S)) {
cout << "Empty!" << endl;
return;
}
SNode *showNode = S.top->next;
while (showNode) {
cout << showNode->data << " ";
showNode = showNode->next;
}
cout << endl;
return;
}
带头结点的链栈
最新推荐文章于 2025-03-25 17:22:58 发布