#include <stdio.h>
#include<cstdlib>
typedef struct {
int data;
char number[10];
}Elemtype;
typedef struct Sqstack{
Elemtype data;
int stacksize;
struct Sqstack* next;
}Sqstacknode,*LinkStack;
void init(LinkStack& S);
void isempty(LinkStack S);
int pushstack(LinkStack& S, int n);
int popstack(LinkStack& S);
void printfnow(LinkStack S);
int main() {
LinkStack S;
int m;
printf("please input your stack's length:\n");
scanf_s("%d", &m);
init(S);
pushstack(S, m);
printfnow(S);
isempty(S);
popstack(S);
printfnow(S);
isempty(S);
}
void init(LinkStack& S) {
S= NULL;//没有头节点就初始化不用new,直接指向null
}
void isempty(LinkStack S) {
if (S == NULL)
printf("this link stack is empty!\n");
else
printf("this link stack is not empty!\n");
}
int pushstack(LinkStack& S,int n) {
LinkStack p;
for (int i = 0; i < n; i++) {
p = new Sqstacknode;
p->next = NULL;
printf("the %d number is:", i + 1);
scanf_s("%d", &((p->data).data));
p->next = S;//此处的S不能写成S->next,因为定义的时候是没有头节点的。
S = p;
S->stacksize++;
}
return S->stacksize;
}
int popstack(LinkStack& S) {
LinkStack p;
int c;
printf("please input the number that you want delete:\n");
scanf_s("%d", &c);
for (int i = 0; i < c; i++) {
p = S;
S = S->next;
delete p;
S->stacksize--;
}
return S->stacksize;
}
void topdata(LinkStack S) {
if (S != NULL)
printf("the top data is: %d",S->data.data);
}
void printfnow(LinkStack S) {
LinkStack q;
q = S;
printf("the stack is:\n");
while (S) {
if (q->next != NULL) {
printf("%d ", q->data.data);
q = q->next;
}
else
break;
}
printf("\n");
}
把打印函数里的p=!p>next改为p!=NULL就能全部打印了