数据结构例题
例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 }