数制转换
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1024 typedef int elemtype; typedef struct SequenStack { elemtype data[MAXSIZE]; int top; //设置顺序栈的栈顶指针 }SequenStack; //顺序栈的结构类型 SequenStack * Init_SequenStack(); SequenStack * Push_SequenStack(SequenStack *S,elemtype x); SequenStack * Pop_SequenStack(SequenStack *S,elemtype *x); void Conversion(SequenStack *S,int N,int r); int main() { SequenStack *S; elemtype x,y; system("cls"); S=Init_SequenStack(); printf("请输入要转换的字符和数制:\n"); scanf("%d,%d",&x,&y); Conversion(S,x,y); return 0; } SequenStack * Init_SequenStack() //初始化 { SequenStack *S; //定义顺序栈指针变量 S=(SequenStack *)malloc(sizeof(SequenStack)); //申请内存空间 S->top=-1; return S; } //入栈 SequenStack * Push_SequenStack(SequenStack *S,elemtype x) { if(S->top>=MAXSIZE-1) { return 0; //栈满,插入失败,返回0; } else { S->top++; S->data[S->top]=x; return S; } } //出栈 SequenStack * Pop_SequenStack(SequenStack *S,elemtype *x) { if(S->top==-1) { return 0; //栈空 } else { *x=S->data[S->top]; S->top--; return S; } } void Conversion(SequenStack *S,int N,int r) { int x,n,i; char c; x=N; if(r<=10) { while(N>0) { S=Push_SequenStack(S,N%r); N=N/r; } } else if(r>10) { if(N%r<10) { while(N>0) { S=Push_SequenStack(S,N%r); N=N/r; } } else if(N%r>=10) { while(N>0) { n=N%r-10; c='a'+n; S=Push_SequenStack(S,c); N=N/r; } } } printf("%d经过%d进值转换后为:",x,r); while(S->top>=0) { if(S->data[S->top]>=97) { printf("%c",S->data[S->top]); S->top--; } else { printf("%d",S->data[S->top]); S->top--; } } printf("\n"); }
行编辑器
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1024 typedef char elemtype; typedef struct SequenStack { elemtype data[MAXSIZE]; int top; //设置顺序栈的栈顶指针 }SequenStack; //顺序栈的结构类型 SequenStack * Init_SequenStack(); SequenStack * Push_SequenStack(SequenStack *S,elemtype c); SequenStack * Pop_SequenStack(SequenStack *S,elemtype *x); SequenStack * EDIT(SequenStack *S,elemtype c); int main() { char cmd; SequenStack *S; elemtype c,x; int isdo,i,len; system("cls"); S=Init_SequenStack(); printf("请输入要编辑的字符串:\n"); c=getchar(); S=EDIT(S,c); while(S->top>=0) { printf("%c",S->data[S->top]); S->top--; } return 0; } SequenStack * Init_SequenStack() //初始化 { SequenStack *S; //定义顺序栈指针变量 S=(SequenStack *)malloc(sizeof(SequenStack)); //申请内存空间 S->top=-1; return S; } //入栈 SequenStack * Push_SequenStack(SequenStack *S,elemtype x) { if(S->top>=MAXSIZE-1) { return 0; //栈满,插入失败,返回0; } else { S->top++; S->data[S->top]=x; return S; } } //出栈 SequenStack * Pop_SequenStack(SequenStack *S,elemtype *x) { if(S->top==-1) { return 0; //栈空 } else { *x=S->data[S->top]; S->top--; return S; } } SequenStack * EDIT(SequenStack *S,elemtype c) { elemtype x; while(c!='*') { if(c=='#') { Pop_SequenStack(S,&x); } else if(c=='@') { S->top=-1; } else { Push_SequenStack(S,c); } c=getchar(); } return S; }
杨辉三角
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1024 typedef int elemtype; typedef struct SequenQueue { elemtype data[MAXSIZE]; int front; int rear; }SequenQueue; SequenQueue *Init_SequenQueue(); int SequenQueue_Empty(SequenQueue * Q); int SequenQueue_Full(SequenQueue * Q); int SequenQueue_Length(SequenQueue *Q); int Enter_SequenQueue(SequenQueue * Q,elemtype x); int Delete_SequenQueue(SequenQueue * Q,elemtype *x); int GetFront_SequenQueue(SequenQueue * Q,elemtype *x); int find(SequenQueue * Q,elemtype key); void YHTriangle(int n); void menu(); //初始化 SequenQueue *Init_SequenQueue() { SequenQueue * Q; Q=(SequenQueue *)malloc(sizeof(SequenQueue)); if(Q!=NULL) { Q->front=0; Q->rear=0; } return Q; } //判队列空 int SequenQueue_Empty(SequenQueue * Q) { if(Q->front==Q->rear) { return 1; } else { return 0; } } //判断队列满 int SequenQueue_Full(SequenQueue * Q) { if((Q->rear+1)%MAXSIZE==Q->front) { return 1; } else { return 0; } } //循环队列的长度 int SequenQueue_Length(SequenQueue * Q) { return((Q->rear-Q->front+MAXSIZE)%MAXSIZE); } //入队 int Enter_SequenQueue(SequenQueue * Q,elemtype x) { if(SequenQueue_Full(Q)) { return 0; } Q->data[Q->rear]=x; Q->rear=(Q->rear+1)%MAXSIZE; return 1; } //出队 int Delete_SequenQueue(SequenQueue * Q,elemtype *x) { if(Q->front==Q->rear) { return 0; } else { *x=Q->data[Q->front]; Q->front=(Q->front+1)%MAXSIZE; return 1; } } //取队头数据元素 int GetFront_SequenQueue(SequenQueue * Q,elemtype *x) { if(Q->front==Q->rear) { return 0; } else { *x=Q->data[Q->front]; return 1; } } int find(SequenQueue * Q,elemtype key) { int j=0,k; k=Q->front; if(Q->front==Q->rear) { return 0; } else { while(k!=Q->rear) { if(Q->data[k]!=key) { j++; k=(k+1)%MAXSIZE; } else if(Q->data[k]==key) { return j; } } return 0; } } void menu() { system("cls"); printf("\t\t1-创建队列\n"); printf("\t\t2-input data\n"); printf("\t\t3-get length\n"); printf("\t\t4-判断队空\n"); printf("\t\t5-修改队头元素\n"); printf("\t\t6-取出队头元素\n"); printf("\t\t7-查找\n"); printf("\t\t8-输出\n"); printf("\t\t9-判断队满\n"); printf("\t\ta-打印杨辉三角\n"); printf("\t\t#-quit\n"); printf("Please select: "); } void YHTriangle(int n) { SequenQueue *T; int a1,a2; //分别存放第i-1行上的相邻两个数据 int i,k,y; T=Init_SequenQueue(); printf("\t%d\n",1); Enter_SequenQueue(T,1); Enter_SequenQueue(T,1); for(i=2;i<=n;i++) { Enter_SequenQueue(T,1); for(k=0;k<i-1;k++) { y=Delete_SequenQueue(T,&a1); y=GetFront_SequenQueue(T,&a2); printf("%d\t",a1); y=Enter_SequenQueue(T,a1+a2); } y=Delete_SequenQueue(T,&a2); printf("\t%d\t\n",a2); y=Enter_SequenQueue(T,1); } } int main() { SequenQueue * Q=NULL; char cmd; int i,len,isdo,m,n; elemtype x,key; system("cls"); menu(); while((cmd=getchar())!='#') { switch(cmd) { case '1': Q=Init_SequenQueue(); printf("\nCreated the Queue!\n"); printf("\n\n\n\t\t\t"); break; case '2': printf("\nInputing data ....\n"); scanf("%d",&x); while(x!=0) { isdo=Enter_SequenQueue(Q,x); if(isdo==0) { printf("入队失败\n"); } scanf("%d",&x); } printf("\n\n\n\t\t\t"); break; case '3': printf("\nCaculating the Length of the Queue...\n"); len=SequenQueue_Length(Q); printf("队列的长度为:%d\n",len); printf("\n\n\n\t\t\t"); break; case '4': isdo=SequenQueue_Empty(Q); if(isdo==0) { printf("队列不为空\n"); } else if(isdo==1) { printf("队列为空\n"); } printf("\n\n\n\t\t\t"); break; case '5': isdo=Delete_SequenQueue(Q,&x); if(isdo==0) { printf("修改队头元素失败\n"); } else if(isdo==1) { printf("删除的数据元素:%d,新的队头元素为%d\n",x,Q->data[Q->front]); } printf("\n\n\n\t\t\t"); break; case '6': isdo=GetFront_SequenQueue(Q,&x); if(isdo==0) { printf("取出失败\n"); } else { printf("取出的数据元素:%d\n",x); } printf("\nGeting the data of the position...\n"); printf("\n\n\n\t\t\t"); break; case '7': printf("请输入要查找的数值:"); scanf("%d",&key); isdo=find(Q,key); if(isdo==0) { printf("查找失败\n"); } else { printf("该数值在队列中的位置:%d\n",isdo+1); } printf("\n\n\n\t\t\t"); break; case '8': printf("\nDisplaying the all data of the Queue!..."); m=Q->front; while(m!=Q->rear) { printf("%d\t",Q->data[m]); m=(m+1)%MAXSIZE; } printf("\n\n\n\t\t\t"); break; case '9': isdo=SequenQueue_Full(Q); if(isdo==1) { printf("队列已满\n"); } else { printf("队列不满"); } break; case 'a': printf("请输入要打印的行数\n"); scanf("%d",&n); YHTriangle(n); break; } fflush(stdin); system("pause"); menu(); } return 0; }