链栈的基本操作: #include<stdio.h> #include<malloc.h> typedef struct node { int data; struct node *next; }StackNode, *pStackNode; /*初始化栈*/ void InitStack(pStackNode &s) { s = (pStackNode)malloc(sizeof(StackNode)); s->next = NULL; } /*销毁栈*/ void ClearStack(pStackNode &s) { pStackNode p = s->next; while (p != NULL) { free(s); s = p; p = p->next; } } /*栈的长度*/ int StackLength(pStackNode s) { pStackNode p = s->next; int i = 0; while (p != NULL) { i++; p = p->next; } return i; } int IsEmpty(pStackNode s) { return (s->next == NULL); } /*进栈操作*/ void Push(pStackNode &s, int key) { pStackNode *p; p = (pStackNode)malloc(sizeiof(StackNode)); p->data = key; p->next = s->next; s->next = p; } /*出栈操作*/ int Pop(pStackNode &s, int &key) { pStackNode *p; if (s->next == NULL) return 0; p = s->next; e = p->data; s->next = p->next; free(p); return 1; } void Display(pStackNode s) { pStackNode p = s->next; while (p ! = NULL) { printf("%d", p->data); } printf("/n"); } 链队的基本操作: typedef struct qnode { int data; struct qnode *next; }QNode,*qQNode; typedef struct { qQNode front; qQNode rear; }LQueue, *qLQueue; /*初始化链队*/ viod InitQueue(qLQueue &q) { q = (LQueue *)malloc(sizeof(LQueue)); q->front = q->rear = NULL; } /*销毁链队*/ void ClearQueue(qLQueue q) { qQNode p = q->front, r; while (p != NULL) { r = p->next; free(p); p = r; r = p->next; } free(q); } int QueueEmpty(qLQueue q) { if (q->rear == NULL) return 1; else return 0; } /*入队*/ void enQueue(qLQueue q, int key) { qQNode s; s = (qQNode)malloc(sizeof(QNode)); s->data = key; s->next = NULL; if (q->rear == NULL) q->front = q->rear = s; else { q->rear->next = s; q->rear = s; } } /*出队*/ int deQueue(qLQueue q, int &key) { qQNode s; if (q->rear == NULL) return 0; s = q->front; if (q->front == q->rear) q->front = q->rear = NULL; else q->front = q->front->next; key = s->data; free(s); return 1; ] 报数问题:n个人站一排,1、2、1、2.。。。。报数,报“2”的站右边,直到n个人都出列为止,输出他们的出列顺序 void number(int n) { int i; int e; qLQueue q; InitQueue(q); for (i=0; i<=n; i++) { enQueue(q); } printf(""); while (!QueueEmpty(q)) { deQueue(q); /*出一个人*/ printf("%4d", e);/*输出其编号*/ if (!QueueEmpty(q)) { deQueue(q, e);/*出一个人*/ enQueue(q, e);/*将刚出列的元素进队*/ } } printf("/n"); }