/* * 子任务名:1.定长顺序栈的入栈出栈操作 * 姓名:宫梦南 * 班级:2015级5班 * 学号:2015015391 * 日期:2020.10.26 */ #include <stdio.h> #include <malloc.h> #define TRUE 1 #define FALSE 0 /* * 定义顺序栈结构体 */ typedef struct stack{ int datas [5]; int top; // 栈顶指针 }*Stack; /* * 初始化顺序栈 */ Stack InitStack(){ // 分配顺序栈内存空间 Stack s = (Stack)malloc(sizeof(struct stack)); s -> top = -1; return s; } /* * 入栈 压栈 * s 顺序栈 * data 入栈数据 */ int Push(Stack s, int data){ s -> datas[s -> top] = data; s -> top ++; return TRUE; } /* * 出栈 弹栈 * s 顺序栈 */ int Pop(Stack s){ int data; s -> top--; data = s -> datas[s -> top]; return data; } int main(int argc, char const *argv[]) { Stack s = InitStack(); // 入栈元素 int datas[] = {2, 4, 6, 8, 10}; // for循环依次入栈 printf("Push:"); for(int i = 0; i < 6; i++){ printf("%d\t", datas[i]); Push(s, datas[i]); } printf("入栈成功"); // 出栈 弹栈 printf("\nPop: "); for(int i = 0; i < 6; i++){ printf("%d\t", Pop(s)); } printf("出栈成功"); return 0; }
push:2 4 6 8 10 0入栈成功
pop:0 10 8 6 4 2出栈成功
/* * 子任务名:1. * 姓名:宫梦南 * 班级:2015级5班 * 学号:2015015391 * 日期: 2020.10.26 */ #include <stdio.h> #include <stdlib.h> #define OK 1; #define ERROR 0; typedef int ElemType; typedef int Status; typedef struct Node { ElemType data; struct Node *next; }Node, *QueuePrt; typedef struct { //队头,尾指针 QueuePrt front, rear; }LinkQueue; //初始化一个队列(创建一个队列) Status InitQueue(LinkQueue *q) { q->front = q->rear = (QueuePrt)malloc(sizeof(Node)); if (!q->front) { exit(0); } q->front->next = NULL; return OK; } //入队操作EnQ Status EnQ(LinkQueue *q, ElemType e) { QueuePrt p = (QueuePrt)malloc(sizeof(Node)); if (!p) { exit(0); } p->data = e; p->next = NULL; q->rear->next = p; q->rear = p; return OK; } //出队操作 Status DeQ(LinkQueue *q, ElemType *e) { QueuePrt p; if (q->front == q->rear) { return ERROR; } p = q->front->next; *e = p->data; q->front->next = p->next; if (q->rear == p) { q->rear = q->front; } free(p); return OK; } //遍历访问队列中的元素 void Visit(Node*s) { Node*v=s->next; while(v) { printf("%d->",v->data); v=v->next; } } //主函数 int main() { LinkQueue q; int a[10]; int i; InitQueue(&q); for (i = 0; i < 10; i++) { EnQ(&q, i + 1); } for (i = 0; i < 10; i++) { DeQ(&q, &a[i]); printf("%d\t", a[i]); } return 0; }1 2 3 4 5 6 7 8 9 10