scanf("%d",&L->data[i]);
L->length=n;
printf("\n请选择:
\n");
printf("A----------------------插入------------------\n");
printf("B----------------------删除------------------\n");
printf("C----------------------退出------------------\n");
scanf("\n%c",&c);
while(c!
='c'&&c!
='C')
{if(c=='A'||c=='a')insertlist(L);
elsedeletelist(L);
printf("当前顺序表中的数据是:
\n");
for(i=0;ilength;i++)
printf("%3d",L->data[i]);
printf("\n请再选择:
\n");
printf("A----------------------插入------------------\n");
printf("B----------------------删除------------------\n");
printf("C----------------------退出------------------\n");
scanf("\n%c",&c);
}
}
voidinsertlist(seqlist*L)
{intx,i,j;
printf("\n请输入要插入的整数:
");
scanf("\n%d",&x);
printf("\n在下面序列中插入%d\n",x);
for(i=0;ilength;i++)
printf("%3d",L->data[i]);
i=0;
while(ilength&&xdata[i])i++;
if(i<0||i>L->length+1)
Error("\n插入位置错误!
\n");
elseif(L->length>=ListSize)Error("\n表溢出,无法插入!
");
elseif(x==L->data[i])printf("\n重复插入,不允许!
\n");
else{printf("\n将数据%d插入到第%d的位置上\n",x,i);
for(j=L->length-1;j>=i;j--)
/*=========空白处1===========*/
L->data[j+1]=l->data[j];
L->data[i]=x;
L->length++;
/*======================*/
}}
voiddeletelist(seqlist*L)
{intx,i,j,num;
printf("\n请输入要删除的整数:
");
scanf("\n%d",&x);
printf("\n在下面序列中删除%d\n",x);
for(i=0;ilength;i++)
printf("%3d",L->data[i]);
i=0;num=0;
while(ilength&&xdata[i])i++;
if(x!
=L->data[i])Error("\n没找到要删除的整数!
\n");
else
{
num++;
while(L->data[i+1]==x&&ilength-1)
{i++;num++;}
printf("\n删除原表中从第%d个位置以后的%d个数据%d\n",i-num+1,num,x);
for(j=i+1;j<=L->length-1;j++)
/*=====请在下面填入相应的语句======*/
L->data[j-num]=L->data[j];
L->length=L->length-num;
/*=====================*/}}_
2\单链表的插入与删除*/
#include
#include
#include
#defineErrorprintf
#definen5
typedefstructnode{
intdata;
structnode*next;
}ListNode;
typedefListNode*LinkList;
LinkListCreatelinklist(void);
voidInsertlinklist(LinkListhead);
voidDeletelinklist(LinkListhead);
voidOutputlinklist(LinkListhead);
main()
{
LinkListhead;
charc;
head=Createlinklist();
printf("请选择:
\n");
printf("A--------------插入-----------------\n");
printf("B--------------删除-----------------\n");
printf("C--------------退出-----------------\n");
scanf("\n%c",&c);
while(c!
='c'&&c!
='C')
{
if(c=='A'||c=='a')Insertlinklist(head);
elseDeletelinklist(head);
Outputlinklist(head);
printf("\n请再选择:
\n");
printf("A--------------插入-----------------\n");
printf("B--------------删除-----------------\n");
printf("C--------------退出-----------------\n");
scanf("\n%c",&c);
}
}
/*****************************/
LinkListCreatelinklist()
{
intx;
LinkListhead,s,r;
head=(ListNode*)malloc(sizeof(ListNode));
r=head;
r->next=NULL;
printf("请按递减顺序输入整数(输0结束):
\n");
scanf("%d",&x);
while(x!
=0)
{s=(ListNode*)malloc(sizeof(ListNode));
s->data=x;
s->next=r->next;
r->next=s;
r=s;
scanf("\n%d",&x);
}
returnhead;
}
voidInsertlinklist(LinkListhead)
{
intx;
ListNode*p,*s;
inti,j;
printf("请输入要插入的整数:
");
scanf("%d",&x);
p=head;
j=0;
while(p->next&&xnext->data)
{
j++;
p=p->next;
}
if(x==p->next->data)
Error("重复插入,不允许!
\n");
else
{s=(ListNode*)malloc(sizeof(ListNode));
/*=====请在下面填入相应的语句===*/
S->data=x;
S->next=P->next;
P->next=S;
/*====================*/}}
voidDeletelinklist(LinkListhead)
{
intx;
ListNode*p,*r;
inti,j;
printf("请输入要删除的整数:
");
scanf("%d",&x);
p=head;
r=head->next;
while(r&&xdata)
{p=r;r=r->next;}
if(r==NULL||x!
=r->data)Error("没找到要删除的整数.\n");
else{
/*==========空白处2=========*/
p->next=r->next;
free(r);
/*====================*/}}
voidOutputlinklist(LinkListhead)
{ListNode*p;
p=head->next;
printf("当前链表中数据为:
\n");
while(p)
{printf("%6d",p->data);
p=p->next;}}_
/*====数据结构上机考核试题3======*/
/*栈的操作#defineStackSize10
#defineErrorprintf
typedefintDataType;
typedefstruct{
DataTypedata[StackSize];
inttop;
}SeqStack;
voidInitStack(SeqStack*s)
{s->top=0;}
intStackEmpty(SeqStack*S)
{if(S->top==0)return1;
elsereturn0;
}
intStackFull(SeqStack*S)
{returnS->top==StackSize;
}
voidPush(SeqStack*S,DataTypex)
{if(StackFull(S))
Error("栈溢出!
");
/*==========空白处1============*/
ElseS->data[++(S->top)]=x;
/*=====================*/
}
DataTypePop(SeqStack*S)
{
/*========空白处2=========*/
If(StackEmpty(S))
Error(“Stackunderflow”);
ElsereturnS->data[--(S->top)];
/*=========*/
}
voidconversion(intN,intB);
main()
{intN,B;
charch;
printf("进行数值转换请输入Y,退出请输入N:
");
scanf("\n%c",&ch);
while(ch=='Y'||ch=='y')
{printf("请输入需要转换的十进制数:
");
scanf("%d",&N);
printf("\n请输入想要转换的进制数(2,8or16):
");
scanf("%d",&B);
conversion(N,B);
printf("继续转换请输入Y,退出请输入N:
");
scanf("\n%c",&ch);}}
voidconversion(intN,intB)
{DataTypei;
SeqStack*S;
InitStack(S);
while(N)
{Push(S,N%B);N=N/B;}
printf("转换的结果为:
");
while(!
StackEmpty(S))
{i=Pop(S);
switch(i)
{case10:
printf("%c",'a');break;
case11:
printf("%c",'b');break;
case12:
printf("%c",'c');break;
case13:
printf("%c",'d');break;
case14:
printf("%c",'e');break;
case15:
printf("%c",'f');break;
default:
printf("%d",i);}}
printf("\n");}_
/*==========数据结构上机考核试题4======*/
/*队列的操作*/
#include
#defineQueueSize100
#defineErrorprintf
typedefcharDataType;
typedefstruct{
intfront;
intrear;
intcount;
DataTypedata[QueueSize];
}CirQueue;
voidInitQueue(CirQueue*Q)
{Q->front=Q->rear=0;
Q->count=0;}
intQueueEmpty(CirQueue*Q)
{returnQ->count==0;}
intQueueFull(CirQueue*Q)
{returnQ->count==QueueSize;}
voidEnQueue(CirQueue*Q,DataTypex)
{if(QueueFull(Q))
Error("队列溢出!
");
else
{/*==========空白处1===========*/
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
/*=================*/}}
DataTypeDeQueue(CirQueue*Q)
{DataTypetemp;
if(QueueEmpty(Q))
Error("队列下溢!
");
else{temp=Q->data[Q->front];
/*============空白处2===========*/
Q->count--;
Q->front=(q->front+1)%QueueSize;
/*==============*/
returntemp;}}
voidInputch(CirQueue*Q);
voidOutputch(CirQueue*Q);
main()
{CirQueue*Q=0;
charch;
printf("\n继续进行请按Y,退出请按N:
");
scanf("\n%c",&ch);
while(ch=='Y'||ch=='y')
{InitQueue(Q);
Inputch(Q);
Outputch(Q);
printf("\n继续进行请按Y,退出请按N:
");
scanf("\n%c",&ch);}}
voidInputch(CirQueue*Q)
{charch;
printf("\n请输入字符串并以$为结束符:
");
scanf("%c",&ch);
while(ch!
='$')
{EnQueue(Q,ch);
scanf("%c",&ch);}}
voidOutputch(CirQueue*Q)
{charch;
printf("你输入的字符串是:
");
while(!
QueueEmpty(Q))
{ch=DeQueue(Q);
printf("%c",ch);}
printf("\n");}
/*========数据结构上机考核试题5=====*/
/*二叉树的遍历*/
#include
#include
typedefcharDataType;
typedefstructnode{
DataTypedata;
structnode*lchild,*rchild;
}BinTNode;
typedefBinTNode*BinTree;
intcount;
voidCreateBinTree(BinTree*T);
voidLevelorder(BinTreeT);
main()
{BinTreeT;
charch1,ch2;
printf("\n请选择:
\n");
ch1='y';
while(ch1=='y'||ch1=='Y')
{printf("\nA------------------二叉树建立-------------");
printf("\nB------------------层次遍历---------------");
printf("\nC------------------退出-------------------\n");
scanf("\n%c",&ch2);
switch(ch2){case'a':
case'A':
printf("请按先序输入建立二叉树存储的结点序列:
\n");
CreateBinTree(&T);break;
case'b':
case'B':
printf("该二叉树的层次遍历序列为:
\n");
Levelorder(T);break;
case'c':
case'C':
ch1='n';break;
default:
ch1='n';}}}
voidCreateBinTree(BinTree*T)
{charch;
scanf("\n%c",&ch);
if(ch=='0')*T=NULL;
else{*T=(BinTNode*)malloc(sizeof(BinTNode));
(*T)->data=ch;
CreateBinTree(&(*T)->lchild);
CreateBinTree(&(*T)->rchild);}}
voidLevelorder(BinTreeT)
{inti,j;
BinTNode*q[20],*p;
p=T;
if(p!
=NULL){i=1;q[i]=p;j=2;}
while(i!
=j)
{p=q[i];printf("%3c",p->data);
/*==========空白处1==============*/
if(p->lchild!
=NULL){q[j]=p->lchild;j++;}
if(p->rchild!
=NULL){q[j]=p->rchild;j++;}
i++;
/*===========*/}}
/*======数据结构上机考核试题6========*/
/*求二叉树叶子结点个数*/
#include
#include
typedefcharDataType;
typedefstructnode{
DataTypedata;
structnode*lchild,*rchild;
}BinTNode;
typedefBinTNode*BinTree;
intcount;
voidCreateBinTree(BinTree*T);
voidLeafnum(BinTreeT);
main()
{
BinTreeT;
charch1,ch2;
printf("\n请选择:
\n");
ch1='y';
while(ch1=='y'||ch1=='Y')
{
printf("\nA------------------二叉树建立-------------");
printf("\nB------------------求叶子结点个数---------");
printf("\nC------------------退出-------------------\n");
scanf("\n%c",&ch2);
switch(ch2)
{case'a':
case'A':
printf("请按先序输入二叉树存储的结点序列:
\n");
CreateBinTree(&T);break;
case'b':
case'B':
count=0;Leafnum(T);
printf("该二叉树有%d个叶子.\n",count);
break;
case'c':
case'C':
ch1='n';break;
default:
ch1='n';}}}
voidCreateBinTree(BinTree*T)
{charch;
scanf("\n%c",&ch);
if(ch=='0')*T=NULL;
else{*T=(BinTNode*)malloc(sizeof(BinTNode));
(*T)->data=ch;
CreateBinTree(&(*T)->lchild);
CreateBinTree(&(*T)->rchild);}}
voidLeafnum(BinTreeT)
{if(T)
{if(T->lchild==NULL&&T->rchild==NULL)
/*=============空白处1==============*/
count++;
Leafnum(T->lchild);
Leafnum(T->rchild);
/*==================*/}}
/*========数据结构上机考核试题7======*/
/*二分查找*/
#include
#definen10
main()
{intR[n],i,k,low,mid,high,m;
charch;
printf("请按递增顺序输入10个整数:
\n",n);
for(i=0;iscanf("%d",&R[i]);
printf("需要查找请输入Y,否则输入N:
");
scanf("\n%c",&ch);
while(ch=='y'||ch=='Y')
{printf("请输入要查找的整数:
\n");
scanf("\n%d",&k);
low=0;high=n-1;m=0;
while(low<=high)
{/*========空白处1===========*/
/*=======请在下面填入相应的语句========*/
mid=(low+high)/2;
m++;
if(R[mid]>k)high=mid-1;
elseif(R[mid]elsebreak;
/*=============*/}
if(low>high)
{printf