#include #include #include #include #define MAX 100 typedef int DataType; typedef struct { DataType data[MAX]; // 元素 int top; // 栈顶指针 }SqStack; typedef struct { char data[MAX]; // 元素 int top; // 栈顶指针 }SqStackChar; void InitStack(SqStack *L){ L->top = -1; printf("\n初始化成功\n"); } int Push(SqStack *L, DataType e){ if(L->top == MAX-1){ return 0; } else { L->top++; L->data[L->top]=e; return 1; } } int Pop(SqStack *L, DataType *e){ if(L->top ==- 1){ return 0; } else { *e=L->data[L->top]; L->top--; return 1; } } int GetTop(SqStack *L, DataType *e){ if(L->top == -1){ return 0; } else { *e=L->data[L->top]; return 1; } } int StackEmpty(SqStack L){ if(L.top == -1){ return 1; } else { return 0; } } int StackFull(SqStack L){ if(L.top == MAX-1){ return 1; } else { return 0; } } void OutputStack(SqStack L){ printf("\n\n"); for(int i=0; itop == MAX-1){ return 0; } else { // 验证位置 if(i>L->top+1 || i<0){ return 0; } // 将 i 及其以后的元素向后移动 1 个单位 for(int j=L->top+1; jdata[j] = L->data[j-1]; } // 插入 L->data[i-1]=e; L->top++; return 1; } } int DeleteListData(SqStack *L, DataType e){ for(int i=0; itop+1; i++){ if(L->data[i]==e){ // 将 i 以后的元素向前移动 1 个单位 for(int j=i; jtop+1; j++){ L->data[j]=L->data[j+1]; } L->top--; return 1; } } return 0; } int DeleteListPos(SqStack *L, int i){ // 验证位置 if(i>L->top+1 || i<0){ return 0; } // 将 i-1 以后的元素向前移动 1 个单位 for(int j=i-1; jtop+1; j++){ L->data[j]=L->data[j+1]; } L->top--; return 1; } char NumToChar(int n){ if(n>=0 && n<=9){ return (char)('0'+n); } else { return (char)('A'+n-10); } } int PushChar(SqStackChar *L, char e){ if(L->top == MAX-1){ return 0; } else { L->top++; L->data[L->top]=e; return 1; } } int PopChar(SqStackChar *L, char *e){ if(L->top==-1){ return 0; } else { *e=L->data[L->top]; L->top--; return 1; } } void Base(SqStackChar *L, int n, int e){ int i; char temp; // 转换 while(e){ PushChar(L, NumToChar(e%n)); // 进栈 e=e/n; } // 输出 printf("\n转换后的数为:"); while(1){ i=PopChar(L, &temp); if(i==0){ break; } else { printf("%c",temp); } } printf("\n\n"); } void Palindrome(SqStackChar *L, char e[]){ int i=1,len=strlen(e),k; char temp; // 转换 for(int j=0; j-1){ printf("出栈元素为 %d\n",e); } else { printf("栈为空\n"); } break; case 3: OutputStack(L1); break; case 4: n=GetTop(&L1,&e); if(n>-1){ printf("栈顶元素为 %d\n",e); } else { printf("栈为空\n"); } break; case 5: if(StackFull(L1)){ printf("栈已满,无法入栈。"); } else { printf("请输入要插入的位置:"); scanf("%d",&n); printf("请输入要插入的元素:"); scanf("%d",&e); n=InsertStack(&L1,n-1,e); if(!n){ printf("插入失败,位置输入错误。\n"); } else { printf("插入成功。\n"); } } break; case 6: printf("请输入需要删除的元素的值:"); scanf("%d",&e); n=DeleteListData(&L1,e); if(n==0){ printf("删除失败,元素不存在。\n"); } else { printf("删除成功\n"); } OutputStack(L1); break; case 7: printf("请输入需要删除的元素的位置:"); scanf("%d",&n); n=DeleteListPos(&L1,n); if(n==0){ printf("删除失败,位置不存在。\n"); } else { printf("删除成功\n"); } OutputStack(L1); break; case 8: L2.top = -1; // 初始化 printf("请输入需要转换的十进制数:"); scanf("%d",&e); printf("请输入需要转换成的进制:"); scanf("%d",&n); Base(&L2,n,e); break; case 9: L2.top = -1; // 初始化 printf("请输入需要判断的回文数:"); scanf("%s",char_e); Palindrome(&L2,char_e); break; default: break; } printf("请按任意键继续..."); getch(); system("cls"); } printf("感谢使用,再见\n"); return 0; }