- # include <stdio.h>
- # include <stdlib.h>
- typedef char NodeData;
- //链栈
- typedef struct Node
- {
- NodeData data;
- struct Node *next;
- }StackNode;
- typedef struct
- {
- StackNode *top;
- }
- LinkStack;
- /*置栈空*/
- void initStack(LinkStack *ls)
- {
- ls->top=NULL;
- }
- /*判栈空*/
- int isStackEmpty(LinkStack *ls)
- {
- return ls->top==NULL;
- }
- /*进栈*/
- void pushStack(LinkStack *ls,NodeData nodedata)
- {
- StackNode *p;
- p=(StackNode *)malloc(sizeof(StackNode));
- p->data=nodedata;
- p->next=ls->top;
- ls->top=p;
- }
- /*出栈*/
- NodeData popStack(LinkStack *ls)
- {
- StackNode *p=ls->top;
- NodeData popNode=ls->top->data;
- ls->top=ls->top->next;
- free(p);
- return popNode;
- }
- /*打印栈*/
- void printStack(LinkStack *ls)
- {
- int i=0;
- StackNode *node;
- node=ls->top;
- while(node->next!=NULL)
- {
- node=node->next;
- printf("%d = %c\n",i,node->data);
- i++;
- }
- }
- /* LinkStack结构类型的定义是为了方便在函数体中修改top指针本身通过修改指向LinkStack的top指针来控制入栈和出栈 */
- /* 是通过指针参数修改指针所指内容的典型用法 */
- void main()
- {
- LinkStack *ls;
- char inData;
- ls=(LinkStack *)malloc(sizeof(LinkStack));
- initStack(ls);
- //入栈
- printf("请输入data\n");
- while(inData != '\n')
- {
- scanf("%c",&inData);
- pushStack(ls,inData);
- printf("%c\n",inData);
- }
- printf("linkStack:\n");
- //打印栈元素
- printStack(ls);
- printf("pop stack\n");
- //出栈
- popStack(ls);
- printStack(ls);
- }
# include <stdio.h> # include <stdlib.h> typedef char NodeData; //链栈 typedef struct Node { NodeData data; struct Node *next; }StackNode; typedef struct { StackNode *top; } LinkStack; /*置栈空*/ void initStack(LinkStack *ls) { ls->top=NULL; } /*判栈空*/ int isStackEmpty(LinkStack *ls) { return ls->top==NULL; } /*进栈*/ void pushStack(LinkStack *ls,NodeData nodedata) { StackNode *p; p=(StackNode *)malloc(sizeof(StackNode)); p->data=nodedata; p->next=ls->top; ls->top=p; } /*出栈*/ NodeData popStack(LinkStack *ls) { StackNode *p=ls->top; NodeData popNode=ls->top->data; ls->top=ls->top->next; free(p); return popNode; } /*打印栈*/ void printStack(LinkStack *ls) { int i=0; StackNode *node; node=ls->top; while(node->next!=NULL) { node=node->next; printf("%d = %c\n",i,node->data); i++; } } /* LinkStack结构类型的定义是为了方便在函数体中修改top指针本身通过修改指向LinkStack的top指针来控制入栈和出栈 */ /* 是通过指针参数修改指针所指内容的典型用法 */ void main() { LinkStack *ls; char inData; ls=(LinkStack *)malloc(sizeof(LinkStack)); initStack(ls); //入栈 printf("请输入data\n"); while(inData != '\n') { scanf("%c",&inData); pushStack(ls,inData); printf("%c\n",inData); } printf("linkStack:\n"); //打印栈元素 printStack(ls); printf("pop stack\n"); //出栈 popStack(ls); printStack(ls); }