一、代码
//栈的链式存储结构 //链栈的类型定义 #include<stdio.h> #include<stdlib.h> typedef struct node { int data; /*数据域*/ struct node *next; /*指针域*/ }LinkStack;/*链栈结点类型*/ //判别空栈 int StackEmpty(LinkStack *top) { return (top?0:1); } //取栈顶元素 int GetTop(LinkStack *top) { if(!top) { printf("\n链表是空的!"); return NULL; } return top->data; } //入栈 LinkStack *Push(LinkStack *top,int x) { LinkStack *p; p=(LinkStack *)malloc(sizeof(LinkStack));//分配空间 p->data=x; /*设置新结点的值*/ p->next=top;/*将新元素插入栈中*/ top=p;/*将新元素设为栈顶*/ return top; } //出栈 LinkStack *Pop(LinkStack *top) { if(!top) { printf("\n链栈是空的!"); return NULL; } //判断是否为空栈n LinkStack *p=top;//指向被删除的栈顶 top=top->next; //修改栈顶指针 free(p); return top; } int main(void) { int a[2]={1,2},i; LinkStack *linkStack; linkStack=(LinkStack *)malloc(sizeof(LinkStack)); linkStack->data=1; linkStack->next=NULL; for(i=1;i<2;i++) { linkStack=Push(linkStack,a[i]); } //取栈顶元素为 printf("栈顶元素为:"); printf("%d\n",GetTop(linkStack)); //把栈顶元素出栈 linkStack=Pop(linkStack); //出栈后的栈顶元素是 printf("出栈后的栈顶元素是:"); printf("%d",GetTop(linkStack)); printf("\n"); //判断是否为空栈 if(StackEmpty(linkStack)==0) printf("linkStack为非空链栈!\n"); else printf("linkStack为空链栈!\n"); return 0; }