第一题:
#include
struct list
{
int num;
struct list *next;
}head={0,0};
void push(struct list *head,int num)
{
struct list *p=head;
while(p->next&&p->next->num
p=p->next;
};
struct list *p1=new list;
p1->num=num;
p1->next=p->next;
p->next=p1;
}
void pop(struct list *head,int num1,int num2)//num1
struct list *p=head,*q,*q1;
while(p->next&&p->next->num<=num1)
{
p=p->next;
//cout<
};
q=p;
p=p->next;
while (p&&p->num
q1=p;
p=p->next;
delete q1;
}
q->next=p;
}
void print(struct list *head)
{
struct list *p=head->next;
while (p)
{
cout<
}
}
void main()
{
push(&head,1);
push(&head,4);
push(&head,6);
push(&head,2);
push(&head,3);
push(&head,7);
push(&head,-1);
print(&head);
cout<
print(&head);
}
第二题:
#include
void change(unsigned int num,char str[])
{
unsigned int temp;
int i=0;
char te[100];
do
{
//temp=num/8;
te[i++]=num%8+48;
num=num/8;
} while(num);
for (int j=0;j {
str[j]=te[i-j-1];
}
str[j]=0;
}
void main()
{
unsigned int num;
char str[100];
cin>>num;
change(num,str);
cout<
第三题:
#include
struct list
{
int num;
struct list *next;
}head1={0,0},head2={0,0},head3={0,0};
void push(struct list *head,int num)
{
struct list *p=head;
while(p->next&&p->next->num
p=p->next;
};
struct list *p1=new list;
p1->num=num;
p1->next=p->next;
p->next=p1;
}
void print(struct list *head)
{
struct list *p=head->next;
while (p)
{
cout<
}
}
void hebing(struct list *head1,struct list *head2,struct list *head3)
{
struct list *p1=head1->next,*p2=head2->next,*p3=head3,*p4;
while (p1||p2)
{
if (p1&&p2&&p1->num==p2->num)
{
p4=p1;
p1=p1->next;
p2=p2->next;
}
else if (p1&&!p2||((p1&&p2)&&p1->num
{
p4=p1;
p1=p1->next;
}
else
{
p4=p2;
p2=p2->next;
}
struct list *p=new struct list;
p->num=p4->num;
p->next=p3->next;
p3->next=p;
p3=p3->next;
}
}
void main()
{
push(&head1,1);
push(&head1,4);
push(&head1,6);
push(&head1,2);
push(&head1,3);
push(&head1,7);
push(&head1,-1);
push(&head2,3);
push(&head2,1);
push(&head2,9);
push(&head2,-2);
push(&head2,-3);
push(&head2,7);
push(&head2,-1);
print(&head1);
cout<
cout<
print(&head3);
}
//最近要考试,有空把后面几个写给你。
//妄我专门腾出那么多时间帮你写。竟不加分。
第二题: 把M改成8就行了 这也是我们的一道作业 是转换成任意进制的
#include
#include
typedef int Status; //status 是函数的类型,其值是函数的结果状态代码
#define TURE 1
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2 //函数的结果状态代码的宏定义
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define INCREMENT 10 //存储空间分配增量
typedef struct {
int * b; //在栈结构之前和销毁之后,b的值均为NULL
int * t; //栈顶指针
int stacksize; //当前分配的存储空间
}SqStack;
//--------------------------基本操作的算法描述---------------------------------------
Status InitStack(SqStack &S)
{ //构造一个空栈S
S.b=(int*)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S.b)exit(OVERFLOW); //存储分配失败
S.t=S.b;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//Initstack
//Status DestroyStack(SqStack &S){ //销毁栈S
// while(S.b!=S.t){
// free(--S.t)
// }
// return OK;
//}//Destroystack
Status Push(SqStack &S,SElemType e){ //插入e为新的栈顶元素
if(S.t-S.b>=S.stacksize){ //栈满追加存储空间
S.b=(SElemType*) realloc (S.b,(S.stacksize+INCREMENT)* sizeof(SElemTyoe));
if(!S.b)exit(OVERFLOW); //存储分配失败
S.t=S.b+S.stacksize;
S.Stacksize+=INCREMENT;
}//if
*S.t++=e;
return OK;
}//Push
Status StackEmpty(SqStack S){ //若栈S为空,则返回TURE,否则返回FALSE。
if(S.b==S.t)return OK;
else return FALSE;
}//StackEmpty
Status Pop(SqStack &S,SElemType &e){ //若S不空,则删除S的栈顶元素,用e其值 并返回OK;否则返回FALSE
if(S.b==S.t)return ERROR;
e=*--S.t;
return OK;
}//Pop
void conversion(SqStack &S,SElemType N,SElemTyoe M) { //把 N 转换成M 进制,并存入S中;
while(N){
Push(S,N%M);
N=N/M;
}
}//conversion
//------------------------------主函数部分--------------------------------------------
void main(){
SqStack S;
int n,m,e;
char p;
InitStack(S);
do{
printf("请输入一非负十进制整数和要转换的进制数(用空格隔开)");
scanf("%d %d",&n,&m);
conversion(S,n,m); //调用conversion 进行转换
printf("%d转换成%d进制为:\n",n,m);
while(!StackEmpty(S)){ //输出结果
Pop(S,e);
if(e>=10)printf("%x",e);
else printf("%d",e);
}//while
//StackEmpey(S); //销毁栈S
printf("如果想要继续请按下Y键,否则请按任意键:"); //做个循环——再次转换
scanf("%c",&p);
}while(p=='Y'||p=='y');
}
这种题目好好看看课本就可以做出来的。还是自己学吧。