黑马程序员技术交流社区

标题: 数据结构试验——栈与队列 [打印本页]

作者: Stars√永恒    时间: 2014-2-19 15:56
标题: 数据结构试验——栈与队列
  1. #include<iostream>
  2. using namespace std;
  3. typedef int Elemtype;
  4. typedef struct snode{
  5.     Elemtype data;
  6.     struct snode *next;
  7. }Linkstack;
  8. void Initstack(Linkstack **top)
  9. {*top=(Linkstack *)malloc(sizeof(Linkstack));
  10. (*top)->next=NULL;
  11. cout<<"栈初始化成功!\n";
  12. }
  13. int push(Linkstack **top,Elemtype x)
  14. {
  15.     Linkstack *s;
  16.     s=(Linkstack*)malloc(sizeof(Linkstack));
  17.     s->data=x;
  18.     s->next=(*top)->next;
  19.     (*top)->next=s;
  20.     return 1;

  21. }
  22. int Empty(Linkstack **top)
  23. {return ((*top)->next==NULL?1:0);}
  24. int pop(Linkstack **top,Elemtype *x)
  25. {
  26.     Linkstack *s;
  27.     if(Empty(top))
  28.     {
  29.         cout<<"\n 栈为空!";
  30.         return 0;
  31.     }
  32.         s=(*top)->next;
  33.         *x=s->data;
  34.         (*top)->next=s->next;
  35.         free(s);
  36.         return 1;
  37. }
  38. //队列功能的实现
  39. typedef struct qnode{
  40.     Elemtype data;
  41.     struct qnode *next;
  42. }qtype;
  43. typedef struct sqtr{
  44.     qtype *front,*rear;
  45. }squeue;
  46. void Initqueue(squeue *LQ)
  47. {
  48.     qtype *p;
  49.     p=(qtype *)malloc(sizeof(qtype));
  50.     p->next=NULL;
  51.     LQ->front=LQ->rear=p;
  52.     cout<<"队列初始化成功!\n";
  53. }
  54. int Enqueue(squeue *LQ,Elemtype x)
  55. {
  56.     qtype *s;
  57.     s=(qtype *)malloc(sizeof(qtype));
  58.     s->data=x;
  59.     s->next=LQ->rear->next;
  60.     LQ->rear->next=s;
  61.     LQ->rear=s;
  62.     return 1;
  63. }
  64. int Empty(squeue *LQ)
  65. {return(LQ->front==LQ->rear?1:0);}
  66. int Outqueue(squeue *LQ,Elemtype *x)
  67. {
  68.     qtype *p;
  69.     if(Empty(LQ))
  70.     {
  71.         cout<<"队列为空!";
  72.         return 0;
  73.     }
  74.     p=LQ->front->next;
  75.     *x=p->data;
  76.     LQ->front->next=p->next;
  77.     if(LQ->front->next==NULL)
  78.         LQ->rear=LQ->front;
  79.     free(p);
  80.     return 1;
  81. }

  82. void Dectoothers(int n,int b)
  83. {
  84.     char B[]="0123456789ABCDEF";
  85.     Elemtype a,c;
  86.     Linkstack *top;
  87.     squeue LQ;
  88.     Initstack (&top);
  89.     Initqueue(&LQ);
  90.     cout<<n<<"转化为"<<b<<"进制数为:";
  91.     while(n)
  92.     {
  93.         push(&top,n%b);
  94.         n=n/b;
  95.     }
  96.     while(!Empty(&top))
  97.     {
  98.         pop(&top,&a);
  99.         Enqueue(&LQ,a);
  100.         Outqueue(&LQ,&c);
  101.         cout<<B[c]<<' ';
  102.     }

  103.     cout<<endl;
  104. }
  105. int main()
  106. {
  107.     char s;
  108.     int n,b;
  109.     do
  110.     {
  111.       cout<<"请输入要转化成其他进制数的非负数:";
  112.       cin>>n;
  113.       cout<<"请输入需要转化成的进制:";
  114.       cin>>b;
  115.       Dectoothers(n,b);
  116.       cout<<"需要结束请输入N/n,继续输入Y/y:";
  117.       cin>>s;
  118.     }while((s!='n') && (s!='N'));
  119.       return 0;
  120. }


复制代码

作者: ___________゛M    时间: 2014-2-19 16:01
  1. 队列——循环队列
  2. # include <stdio.h>
  3. # include <stdlib.h>

  4. typedef struct Queue
  5. {
  6.     int * pData;
  7.     int front ;
  8.     int rear;
  9. }QUEUE;

  10. void init(QUEUE * pHead)
  11. {
  12.     pHead->pData = (int *)malloc(sizeof(Queue) *6);
  13.     if(NULL == pHead->pData)
  14.     {
  15.         exit(-1);
  16.     }
  17.     pHead->front = 0;
  18.     pHead->rear = 0;

  19. }

  20. bool full(QUEUE * pHead)
  21. {
  22.     if((pHead->rear + 1) % 6 ==pHead->front)
  23.     {
  24.         return true;
  25.     }
  26.     else
  27.     {
  28.         return false;
  29.     }
  30.    
  31. }

  32. bool empty(QUEUE * pHead)
  33. {
  34.     if(pHead->front == pHead->rear)
  35.     {
  36.         return true;
  37.     }
  38.       
  39.     else
  40.     {
  41.         return false;
  42.     }
  43.       
  44. }

  45. void in(QUEUE * pHead, int a)
  46. {
  47.     if(full(pHead))
  48.     {
  49.         printf("队满\n");
  50.         return;
  51.     }
  52.       
  53.     pHead->pData[pHead->rear] = a;
  54.     pHead->rear = (pHead->rear + 1) % 6;
  55. }

  56. void out(QUEUE * pHead,int * a)
  57. {
  58.     if(empty(pHead))
  59.         exit(-1);
  60.     * a = pHead->pData[pHead->front];
  61.     pHead->front = (pHead->front + 1) % 6;
  62. }

  63. void print(QUEUE * pHead)
  64. {
  65.     if(empty(pHead))
  66.         exit(-1);
  67.     int a = pHead->front;
  68.     while(a != pHead->rear)
  69.     {
  70.         printf("%d  ",pHead->pData[a]);
  71.         a = (a + 1) % 6;
  72.     }
  73.     printf("\n");
  74. }

  75. int main()
  76. {
  77.     int a;
  78.     QUEUE pHead;
  79.     init(&pHead);
  80.     in(&pHead,1);
  81.     in(&pHead,2);
  82.     in(&pHead,3);
  83.     in(&pHead,4);
  84.     in(&pHead,5);
  85.     print(&pHead);
  86.     in(&pHead,6);
  87.     out(&pHead,&a);
  88.     printf("out %d\n",a);
  89.     print(&pHead);
  90.     return 0;
  91. }
复制代码



我以前写的循环队列。。。。。。。。。。。 也上一个C 版本的  。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2