zoukankan      html  css  js  c++  java
  • c_数据结构_队的实现

    # 链式存储
    #include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #define STACKINCREMENT 10//存储空间分配增量 #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef struct QNode{ int data; struct QNode *next; }QNode,*QueuePtr; typedef struct{ QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }LinkQueue; //批量存入数据 int create(LinkQueue &Q){ int i,n; QNode *p; printf("请输入需要存入的元素个数:"); scanf("%d",&n); while(n<=0){ printf(" 元素个数小于了“1”,请重新输入元素个数:"); scanf("%d",&n); } printf("请输入元素: "); for(i=n;i>0;--i) { p=(QueuePtr)malloc(sizeof(QNode)); scanf("%d",&p->data); Q.rear->next=p; //尾指针后移 Q.rear=p; //放入元素 } p->next=NULL; return OK; } //构建空队 int InitQueue_Q(LinkQueue &Q){ Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) { printf("存储空间分配失败!!"); exit(OVERFLOW); } Q.front->next=NULL; return OK; } //打印队列中的元素 int pr(LinkQueue &Q,int e) { QueuePtr p; p=Q.front->next; if(Q.front==Q.rear) return ERROR; printf(" 队列中的元素为: "); while(p) { printf("%d ",p->data); p=p->next; } return OK; } int GetHead_Q(LinkQueue &Q,int &e){ if(Q.rear==Q.front)return ERROR; QueuePtr p; p=Q.front->next; //将原队列的头结点赋值给p e=p->data; printf("队头元素为:%d ",e); return OK; } //队尾插入元素 int EnQueue_Q(LinkQueue &Q,int &e){ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p){ //存储分配失败 printf("存储空间分配失败!!! "); exit(OVERFLOW); } printf("请输入插入元素:"); scanf("%d",&e); p->data=e; //e赋值给p指向的空间 p->next=NULL; //p指向NULL Q.rear->next=p; Q.rear=p; //将p赋给Q return OK; } // 删除队列头元素 int DeQueue_Q(LinkQueue &Q,int &e){ QNode *P; if(Q.front==Q.rear) return ERROR; P=Q.front->next ; e=P->data; Q.front ->next =P->next; //将原对头的后继p->next赋值给头结点后继 if(Q.rear ==P) //当队列中只有一个元素时,q->rear指向头结点 Q.rear =Q.front; free(P); printf("删除的元素为:%d",e); return OK; } // 销毁队列 int dest(LinkQueue &Q){ while(Q.front){ Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; } InitQueue_Q(Q); //队销毁后,调用create()从新创建一个空队,因为初始化不在witch语句里 return OK; } void OperateMenu(){ printf(" --------------请选择元素处理方式--------- "); printf("注:此程序为队的实现,故只能对序列尾进行元素的插入和删除 "); printf("0> 退出程序 "); printf("1> 批量存入数据 "); printf("2> 获取队头元素 "); printf("3> 队尾插入元素 "); printf("4> 删除队头元素 "); printf("5> 打印队列 "); printf("6> 销毁队列 "); printf("请选择对元素的处理:"); } void main() { LinkQueue Q; int w,e,k,boo=1; printf("注:此测试过程输入值应全为数字 "); printf("请用户选择初始化队或退出程序: "); printf("队初始化请输入:'1' "); printf("退出请选择'0'或 其它!! "); printf("请选择:"); scanf("%d",&w); if(w==1){ if(InitQueue_Q(Q)) printf(" 构建空队成功!!"); else printf(" 构建失败!!"); OperateMenu(); scanf("%d",&k); while(k) { switch(k) { case 0:break; case 1:boo=create(Q); if(boo) printf(" 存入成功!! "); else printf(" 存入失败!! "); break; case 2:boo=GetHead_Q(Q,e); if(boo) printf(" 获取成功!! "); else printf(" 队为空,获取失败!! "); break; case 3:boo=EnQueue_Q(Q,e); if(boo) printf(" 插入成功!! "); else printf(" 插入失败!! "); break; case 4:boo=DeQueue_Q(Q,e); if(boo) printf(" 删除成功!! "); else printf(" 队为空,删除失败!! "); break; case 5:boo=pr(Q,e); if(boo) printf(" 打印成功!! "); else printf(" 队为空,打印失败!! "); break; case 6:boo=dest(Q); if(boo) printf(" 销毁成功!! "); else printf(" 销毁失败!! "); } OperateMenu(); scanf("%d",&k); } } // return OK; }
  • 相关阅读:
    图书管理系统
    关键路径
    最短路径

    最小生成树、最短路径
    Huffman编码
    LA 3401
    UVA 10881
    OI 刷题记录——每周更新
    4396: [Usaco2015 dec]High Card Wins
  • 原文地址:https://www.cnblogs.com/Vera-y/p/9971268.html
Copyright © 2011-2022 走看看