void main( void) SeqStack my Stack Int 1, x; StackInitiate(&mystack); for(i=0;i<10;i++) StackPush(&myStack, i+1) StackTop(myStack, &x) printi("当前栈顶数据元素为:%dm,x); printf("依次出栈的数据元素序列如下:m"); while(stackNotEmpty(my Stack)) StackPop(&myStack, &x); printf(%d" ,x)
void main(void) { SeqStack myStack; int i , x; StackInitiate(&myStack); for(i = 0; i < 10; i++) StackPush(&myStack, i+1) StackTop(myStack, &x) printf("当前栈顶数据元素为:%d\n", x); printf("依次出栈的数据元素序列如下:\n"); while(StackNotEmpty(myStack)) { StackPop(&myStack, &x); printf("%d ", x); } }
程序运行输出结果如下: 当前栈顶数据元素为:10 依次出栈的数据元素序列如下: 10987654321
程序运行输出结果如下: 当前栈顶数据元素为:10 依次出栈的数据元素序列如下: 10 9 8 7 6 5 4 3 2 1
4、链式堆栈 1)链式堆栈 链式存储结构的堆栈。 2)链式栈的存储结构 它是以头指针为栈顶,在头指针处插入或删除,带头结点 的链式堆栈结构 头结点栈顶 栈底 n位。→…-[a∧ 链栈中每个结点由两个世构成:data和next城
4、链式堆栈 1)链式堆栈 链式存储结构的堆栈。 2)链式栈的存储结构 它是以头指针为栈顶,在头指针处插入或删除,带头结点 的链式堆栈结构: 头结点 h an-1 an-2 … a0 ∧ 栈顶 栈底 链栈中每个结点由两个域构成:data域和next域
结点结构体定义如下: typedef struct snode DataType data; struct snode * next: 1 LSNode; 3)链式堆栈的操作实现 (1)初始化 StackInitiate(head) void StackInitiate(lsnode **head) head=(LSNode *)malloc(sizeof(LSNode)); (head)->next= NULL
结点结构体定义如下: typedef struct snode { DataType data; struct snode *next; } LSNode; 3)链式堆栈的操作实现 (1)初始化StackInitiate(head) void StackInitiate(LSNode **head) { *head = (LSNode *)malloc(sizeof(LSNode)) ; (*head)->next = NULL; }
(2)非空否 StackNotEmpty(head) int StackNotEmpty (LSNode *head if(head->next- NULL return 0; else return 1
(2)非空否StackNotEmpty(head) int StackNotEmpty(LSNode *head) { if(head->next == NULL) return 0; else return 1; }