数据结构——栈

来源:互联网 发布:云计算产业 编辑:程序博客网 时间:2024/06/08 02:45
#include <stdio.h>#include <stdlib.h>#include <malloc.h>typedef struct Node{int data;struct Node *next;}NODE,*PNODE;typedef struct Stack{PNODE top;PNODE bottom;}STACK,*PSTACK;void init(PSTACK ps);void push(PSTACK ps,int data);void list(PSTACK ps);bool pop(PSTACK ps,int *val);bool empty(PSTACK ps); int main(){STACK S;int val;init(&S);push(&S,1);push(&S,2);push(&S,3);push(&S,4);push(&S,5);list(&S);if(pop(&S,&val)){printf("出栈的值为:%d\n",val);printf("出栈队列后:\n");}list(&S);return 0;} void init(PSTACK ps){ps->top=(PNODE)malloc(sizeof(NODE));if(ps->top==NULL){printf("动态内存分配失败!");exit(-1); }else{ps->bottom=ps->top;}}void push(PSTACK ps,int data){PNODE p=(PNODE)malloc(sizeof(NODE));//入栈需要动态分配一个结点 p->data=data;p->next=ps->top;ps->top=p;}void list(PSTACK ps){PNODE p=ps->top;//遍历不需要动态态分配一个结点 while(p!=ps->bottom){printf("%d ",p->data); //注意易错点,遍历的时候改变的是p ,top不能变!! p=p->next;}printf("\n");}bool pop(PSTACK ps,int *val){if(empty(ps)){printf("出栈失败!\n"); return false;}else{PNODE p=ps->top;ps->top=p->next;*val=p->data;free(p); p=NULL;return true;}}bool empty(PSTACK ps){if(ps->top==ps->bottom){return true;}else return false;}

原创粉丝点击