数据结构试验——栈与队列
数据结构试验——栈与队列程序代码:
#include<iostream> using namespace std; typedef int Elemtype; typedef struct snode{ Elemtype data; struct snode *next; }Linkstack; void Initstack(Linkstack **top) {*top=(Linkstack *)malloc(sizeof(Linkstack)); (*top)->next=NULL; cout<<"栈初始化成功!\n"; } int push(Linkstack **top,Elemtype x) { Linkstack *s; s=(Linkstack*)malloc(sizeof(Linkstack)); s->data=x; s->next=(*top)->next; (*top)->next=s; return 1; } int Empty(Linkstack **top) {return ((*top)->next==NULL?1:0);} int pop(Linkstack **top,Elemtype *x) { Linkstack *s; if(Empty(top)) { cout<<"\n 栈为空!"; return 0; } s=(*top)->next; *x=s->data; (*top)->next=s->next; free(s); return 1; } //队列功能的实现 typedef struct qnode{ Elemtype data; struct qnode *next; }qtype; typedef struct sqtr{ qtype *front,*rear; }squeue; void Initqueue(squeue *LQ) { qtype *p; p=(qtype *)malloc(sizeof(qtype)); p->next=NULL; LQ->front=LQ->rear=p; cout<<"队列初始化成功!\n"; } int Enqueue(squeue *LQ,Elemtype x) { qtype *s; s=(qtype *)malloc(sizeof(qtype)); s->data=x; s->next=LQ->rear->next; LQ->rear->next=s; LQ->rear=s; return 1; } int Empty(squeue *LQ) {return(LQ->front==LQ->rear?1:0);} int Outqueue(squeue *LQ,Elemtype *x) { qtype *p; if(Empty(LQ)) { cout<<"队列为空!"; return 0; } p=LQ->front->next; *x=p->data; LQ->front->next=p->next; if(LQ->front->next==NULL) LQ->rear=LQ->front; free(p); return 1; } void Dectoothers(int n,int b) { char B[]="0123456789ABCDEF"; Elemtype a,c; Linkstack *top; squeue LQ; Initstack (&top); Initqueue(&LQ); cout<<n<<"转化为"<<b<<"进制数为:"; while(n) { push(&top,n%b); n=n/b; } while(!Empty(&top)) { pop(&top,&a); Enqueue(&LQ,a); Outqueue(&LQ,&c); cout<<B[c]<<' '; } cout<<endl; } int main() { char s; int n,b; do { cout<<"请输入要转化成其他进制数的非负数:"; cin>>n; cout<<"请输入需要转化成的进制:"; cin>>b; Dectoothers(n,b); cout<<"需要结束请输入N/n,继续输入Y/y:"; cin>>s; }while((s!='n') && (s!='N')); return 0; }