数据结构试验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//将十进制数N转换为r进制的数#include
#define L_size 100
void conversion(int N,int r)
{
int s[L_size],top;
int x;
top=-1;
while(N!=0){
s[++top]=N%r;
N=N/r;
}
while(top!=-1)
{
x=s[top--];
if(x==10)printf("A");
else if(x==11)printf("B");
else if(x==12)printf("C");
else if(x==13)printf("D");
else if(x==14)printf("E");
else if(x==15)printf("F");
else printf("%d",x);
}
printf("\n");
}
void main(){
int number,r;
printf("输入10进制数");
scanf("%d",&number);
printf("几进制(2,8,16)");
scanf("%d",&r);
printf("转换结果");
conversion(number,r);
}
//用顺序栈实现算术后缀表达式求值
#include
#include
#define L_size 50
void postexp()
{
int st[L_size],top=-1;
int d=0;
char ch;
printf("输入规范后缀表达式eg:3 2 5*+\n"); while((ch=getchar())!='\n')
{
if(ch==' ')
continue;
else
switch(ch)
{
case '+':
st[top-1]=st[top-1]+st[top];
top--;
break;
case '-':
st[top-1]=st[top-1]-st[top];
top--;
break;
case '*':
st[top-1]=st[top-1]*st[top];
top--;
break;
case'/':
if(st[top]!=0)
{
st[top-1]=st[top-1]/st[top];
top--;
break;
}
else
{
printf("分母为零");
exit(1);
}
break;
default:
while(ch>='0'&&ch<='9')
{
d=10*d+ch-'0';
ch=getchar();
}
st[++top]=d;
d=0;
}
}
printf("运算结果:%d\n",st[top]);
}
void main()
{
postexp();
}
//链式队列基本操作
#include
#include
#include
typedef int Elemtype;
typedef struct node //队列结点类型定义
{ Elemtype data; //队列的数据元素类型
struct node *link; //指向后继结点的指针
}NODE;
struct QueueLk
{ //定义链队
NODE *front,*rear;//定义链队队头和队尾指针
};
//2、入队
struct QueueLk *ldcr(struct QueueLk *QL,Elemtype x)
//将元素x插入到链队列rear中,作为rear的新队尾
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=x;
p->link=NULL; //置新结点的指针为空
if(QL->front==NULL) //队列为空
QL->front=QL->rear=p;
else
{
QL->rear->link=p ; //将链队列中最后一个结点的指针指向新结点
QL->rear=p ; //将队尾指向新结点
}
return QL;
}
//3、出队
Elemtype ldsc(struct QueueLk *QL)
//若链队列不为空,则删除队头元素,返回其元素值
{ NODE *s;
Elemtype x;
if(QL->front==QL->rear) //队空,退出程序
exit(1);
s=QL->front->link; //取队头保存在s中
QL->front->link=s->link ; //删除队头结点
if(s->link==NULL) //如果删除后队列为空,则处理队尾指针QL->rear=QL->front;
x=s->data; //将刚才出队的结点值给x
free(s) ; //释放出该结点的空间return x;
}
//4、队列的初始化
void initqueue(struct QueueLk *QL)
{
QL->front=(NODE *)malloc(sizeof(NODE));
QL->front->link=NULL;
QL->rear=QL->front;
}
//5、队列的显示
void dispqueue(struct QueueLk *QL)
{
NODE *q;
q=QL->front->link;
if(q==NULL)printf("队列已空!\n");
while(q!=NULL)
{
printf("%5d",q->data);
q=q->link;
}
printf("\n");
}
//6、编写主函数验证上述子函数是否正确。
void main()
{
struct QueueLk *p;
int choice,elemdata,x=0;
p=(struct QueueLk *)malloc(sizeof(struct QueueLk));
initqueue(p);
while(1)
{
printf("请输入你的操作选择:\n");
printf("(1)元素入队请按数字1!\n");
printf("(2)元素出队请按数字2!\n");