数据结构例题

例1,写出十进制转二进制的程序

算法思想:运用栈的特点:先进后出,

例如:789=1100010101(B)
789/2=394 余1 第10位
394/2=197 余0 第9位
197/2=98 余1 第8位
98/2=49 余0 第7位
49/2=24 余1 第6位
24/2=12 余0 第5位
12/2=6 余0 第4位
6/2=3 余0 第3位
3/2=1 余1 第2位
1/2=0 余1 第1位
将余位入栈,然后再依次出栈。
主要算法代码:
 1 int change(int n){
 2   int stack[maxsize];top=-1;
 3   int a,b;
 4   if(n==0) printf("%d",n);
 5   while(n!=0){
 6        a=n%2;
 7        stack[++top]=a;
 8        n=n/2;
 9 }
10     while(top!=-1){
11     b=stack[--top];
12     printf("%d",b);
13 
14 }
15 }

例题2.定义正读和反读都相同的字符序列为“回文”,例如,“abcdcba”是回文,“ashgash”不是回文。试写一个算法判断读入的一个以‘@’为结束符的字符序列是否为回文。

算法思想:利用队列和栈的特点:先进先出,先进后出。

算法步骤:

1)将输入元素进队,将元素进栈。

2)比较出栈元素和出队元素。如果所有出队元素和出栈元素相等,则是字符回文。

主要算法:

 1 int IsReverse(){
 2     PseqStack S;
 3     PseqQueue Q;
 4     char e,x,y;
 5     S=Init_SeqStack();  //初始化栈 S
 6     Q=Init_SeqQueue();  //初始化队列 Q
 7     While((e=getchar())!='@'){   //遇到@停止输入 
 8         Push_SeqStack(S,e);  //e进栈 
 9         In_SeqQueue(Q,e);   //e进队列 
10     } 
11     while(!Empty_SeqStack(S)||!Empty_SeqQueue(Q)){
12         Out_SeqStack(S,&x);    //栈顶元素出栈 
13         Pop_SeqQueue(Q,&y);    //队头元素出队 
14         if(x!=y)  
15            return 0;
16     } 
17     return 1;   //所有元素比较完毕,未出现不同,是回文 
18 }

 

posted @ 2022-11-04 11:13  小豪、精神。  阅读(47)  评论(0编辑  收藏  举报