資料結構-兩個鏈式棧實現一個佇列
阿新 • • 發佈:2018-12-13
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct node { int data; struct node *next; }linkstack_t; linkstack_t * creat_empty_linkstack(void) { linkstack_t * s = (linkstack_t *)malloc(sizeof(linkstack_t)); s->data = 0; s->next = NULL; return s; } void inser_linkstack(linkstack_t *s ,int val) { linkstack_t * p = (linkstack_t *)malloc(sizeof(linkstack_t)); p->data = val; p->next = s->next; s->next = p; } int linkstack_is_empty(linkstack_t *s) { return (s->next == NULL)?1:0; } void pop_linkstack(linkstack_t *s,int *val) { linkstack_t *p = s->next; *val = p->data; s->next = p->next; free(p); } void show_linkstack(linkstack_t *s) { linkstack_t *p =s->next; while(p != NULL) { printf("%-3d",p->data); p = p->next; } printf("\n"); } void en_sequeue(linkstack_t *s,int val) { inser_linkstack(s,val); } void de_sequeue(linkstack_t *s1,linkstack_t *s2,int *val) { int tmp; while(!linkstack_is_empty(s1)) { pop_linkstack(s1,&tmp); inser_linkstack(s2,tmp); } pop_linkstack(s2,val); } int main() { linkstack_t * S1 = creat_empty_linkstack(); linkstack_t * S2 = creat_empty_linkstack(); int i,val; for(i=1;i<=10;i++) { en_sequeue(S1,i); } show_linkstack(S1); for (i=1;i<=10;i++) { de_sequeue(S1,S2,&val); printf("%-3d",val); } show_linkstack(S2); return 0; }