1、
第一次作业第一题
#include 2、
}
printf("逆转后的线性表为:\n");
for(i=0;i 3、ist head,int j,int i);
void sqdelete(linklist head,int i);
void sqprint(linklist head);
int sqlength(linklist head);
int main()
{
linklist head;
int x,t,j,i,z;
j=-1,t=1;
printf("建立单链表:\n");
head=crelist();
printf("建立的单链表为:");
sqprint(head);
printf("请选择操作:\n1、插入\n2、删除\n3、求长度 4、\n0、退出\n");
while(t)
{
printf("请选择操作\n");
scanf("%d",&j);
switch(j)
{
case 1:
{
printf("请选择插入位置:\n");
scanf("%d",&i);
printf("请输入插入的数据\n");
scanf("%d",&x);
sqinsert(head,x,i);
break;
}
case 2:
{
printf("请输入删除元素位置\n");
scanf("% 5、d",&i);
sqdelete(head,i);
sqprint(head);
break;
}
case 3:
{
z=sqlength(head);
printf("此链表的长度为%d\n",z);
break;
}
case 0:t=0;break;
}
}
return 0;
}
linklist crelist()
{
linklist head,r,s;
int x,flag=1;
head=(linklist )malloc(sizeof 6、node));
head->next=NULL;
r=head;
printf("请输入数据建立链表,以-1结束\n");
while(flag)
{
scanf("%d",&x);
if(x!=-1)
{
s=(linklist )malloc(sizeof(node));
s->data=x;
r->next=s;
r=s;
}
else
{
flag=0;
r->next=NULL;
}
}
return head;
}
void sqinsert(linkl 7、ist head,int x,int i)
{
linklist p,s;
int k;
p=head;
k=0;
while(p!=NULL&&k 8、nt i)
{
linklist p,q;
int j,e;
p=head;
j=0;
while(p->next!=NULL&&j 9、{
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}
int sqlength(linklist head)
{
linklist p,b;
int n=0;
b=head->next;
p=b;
while(p!=NULL)
{
n++;
p=p->next;
}
return n;
}
第二次作业第一题
#include 10、 maxsize 20
typedef struct
{
int *base;
int *top;
int stacksize;
}sqstack;
int initstack(sqstack &S);
int enstack(sqstack &S);
int delstack(sqstack &S);
void tip();
int main()
{
int j,a,b,k=0,i=0,c,d;
int x[50],y[50];
sqstack S;
initstack(S);
tip();
scanf("%d",&j);
11、 while(j)
{
switch(j)
{
case 1:
{
a=enstack(S);
if(!a)
printf("栈已满且分配存储空间失败\n");
printf("进栈数为%d\n",a);
x[k++]=a;
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 2:
{
b=delstack(S);
if(!b)
12、 printf("栈为空\n");
printf("出栈数为%d\n",b);
y[i++]=b;
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 0:j=0;break;
default :
{
printf("输入有误,请重新输入\n");
tip();
scanf("%d",&j);
break;
}
}
}
printf("进栈数的顺序为:\n");
for(c 13、0;c 14、k &S)
{
int e,length=10;
if(S.top-S.base==S.stacksize*sizeof(int))
{
S.base=(int *)realloc(S.base,(S.stacksize+length)*sizeof(int));
if(S.base==NULL)
return 0;
S.stacksize=S.stacksize+length;
S.top=S.base+S.stacksize*sizeof(int);
}
printf("请输入入栈数字:\n");
scanf("%d",&e);
15、 *S.top++=e;
return e;
}
int delstack(sqstack &S)
{
int e;
if(S.top==S.base)
return 0;
e=*--S.top;
return e;
}
void tip()
{
printf("请输入操作:1、进栈\n2、出栈\n0、退出\n");
}
第二次作业第二题
#include 16、{
int *base;
int front;
int rear;
}sqqueue;
int initqueue(sqqueue &Q);
int enqueue(sqqueue &Q);
int delqueue(sqqueue &Q);
void tip();
int main()
{
int j,a,b,k=0,i=0,c,d;
int x[50],y[50];
sqqueue Q;
initqueue(Q);
tip();
scanf("%d",&j);
while(j)
{
switch(j)
{
17、case 1:
{
a=enqueue(Q);
if(!a)
printf("队列已满\n");
printf("进队数为%d\n",a);
x[k++]=a;
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 2:
{
b=delqueue(Q);
if(!b)
printf("队列为空\n");
printf("出队数为%d\n 18、",b);
y[i++]=b;
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 0:j=0;break;
default :
{
printf("输入有误,请重新输入\n");
tip();
scanf("%d",&j);
break;
}
}
}
printf("进队数的顺序为:\n");
for(c=0;c 19、"出队数的顺序为:\n");
for(d=0;d 20、
return 0;
Q.front=Q.rear=0;
return 1;
}
int enqueue(sqqueue &Q)
{
int e;
if((Q.rear+1)%maxsize==Q.front)
return 0;
printf("请输入入队数字:\n");
scanf("%d",&e);
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%maxsize;
return e;
}
int delqueue(sqqueue &Q)
{
int e;
if(Q.front==Q.rear 21、)
return 0;
e=Q.base[Q.front];
Q.front=(Q.front+1)%maxsize;
return e;
}
void tip()
{
printf("请输入操作:\n1、进队\n2、出队\n0、退出\n");
}
第三次作业
#include 22、rin Substr(seqstrin s,int i,int j);
seqstrin Instr(seqstrin s,int i,char s1[]);
seqstrin Delstr(seqstrin s,int i,int j);
int strIndex(seqstrin s,char t[]);
void tip();
int main()
{
int j,p;
seqstrin s,str1,str2,str3;
char s1[]="xyz";
char t[]="hijk";
strcpy(s.ch,"abcdefghijklmn");
23、
s.length=strlen(s.ch);
tip();
scanf("%d",&j);
while(j)
{
switch(j)
{
case 1:
{
str1=Substr(s,2,10);
if(!(strcmp(str1.ch,s.ch)))
printf("位置不合理\n");
puts(str1.ch);
tip();
scanf("%d",&j);
break;
}
case 2:
{
str2=Instr(s,9,s1); 24、
if(!(strcmp(str2.ch,s.ch)))
printf("位置不合理\n");
puts(str2.ch);
tip();
scanf("%d",&j);
break;
}
case 3:
{
str3=Delstr(s,2,5);
if(!(strcmp(str3.ch,s.ch)))
printf("位置不合理\n");
puts(str3.ch);
tip();
scanf("%d",&j);
break;
}
25、 case 4:
{
p=strIndex(s,t);
if(p==0)
printf("长度太长或在s中找不到字符串t\n");
printf("t在s中出现的位置为第%d个字符处\n",p);
tip();
scanf("%d",&j);
break;
}
case 0:j=0;break;
default :
{
printf("输入错误,请重新输入\n");
tip();
scanf("%d",&j);
break;
} 26、
}
}
return 0;
}
seqstrin Substr(seqstrin s,int i,int j)
{
seqstrin str;
int k,h=0;
str.length=0;
if(i<0||i>s.length||j<0||i+j-1>s.length)
return s;
for(k=i-1;k 27、int i,char s1[])
{
seqstrin str,*p;
int k,l,j,c,t;
p=&s;
l=strlen(s1);
if(i<0||i>s.length+1)
return s;
if(l)
{
if(l+s.length>=100)
if((p=(seqstrin *)realloc(p,(s.length+l)*sizeof(char)))==NULL)
return s;
for(k=s.length-1;k>=i-1;k--)
str.ch[k+l]=s.ch[k];
for(j 28、i-1,c=0;j<=i+l-1,c<=l-1;j++,c++)
str.ch[j]=s1[c];
for(t=0;t 29、1;k++)
str.ch[k]=s.ch[k];
for(k=i+j-1;k 30、<=n-m+1;j++)
{
for(k=0;k 31、stdio.h>
#include 32、1,T2;
T1=M=InitArray(T);
printf("你输入的矩阵为:\n");
for(i=1;i<=M.tu;i++)
printf("%d\n%d\n%d\n",M.data[i].i,M.data[i].j,M.data[i].e);
T2=Transpose(M,T1);
printf("转置后的矩阵为:\n");
for(j=1;j<=M.tu;j++)
printf("%d\n%d\n%d\n",M.data[j].i,M.data[j].j,M.data[j].e);
return 0;
}
TSMatrix Init 33、Array(TSMatrix T)
{
int i;
&T=(TSMatrix *)malloc(sizeof(TSMatrix));
printf("请输入此矩阵的行数、列数及非零元素个数:\n");
scanf("%d%d%d",T.mu,T.nu,T.tu);
printf("请输入相关数据完成此矩阵:\n");
for(i=0;i 34、\n");
scanf("%d",T.data[i].e);
&T=(TSMatrix *)malloc(sizeof(TSMatrix));
}
return T;
}
TSMatrix Transpose(TSMatrix M,TSMatrix T1)
{
int col,t,p,q;
int num[100],cpot[100];
T1.mu=M.mu,T1.nu=M.nu,T1.tu=M.tu;
if(T1.tu)
{
for(col=1;col<=M.tu;++col)
num[col]=0;
for(t=1;t< 35、M.tu;++t)
++num[M.data[t].j];
cpot[1]=1;
for(col=2;col<=M.nu;++col)
cpot[col]=cpot[col-1]+num[col-1];
for(p=1;p<=M.tu;++p)
{
col=M.data[p].j;
q=cpot[col];
T1.data[q].i=M.data[p].j;
T1.data[q].j=M.data[p].i;
T1.data[q].e=M.data[p].e;
++cpot[col];
}
}
36、
return T1;
}
第五次作业
#include 37、ree T1);
int Leaf_Sum(BTtree T1);
void tip();
int main()
{
BTtree T,T1;
BTnode b;
int t,j,z;
t=1;
T=&b;
printf("建立二叉树:\n");
T1=Creat_BT(T);
{
while(t)
scanf("%d",&j);
switch(j)
{
case 1:
{
preorder(T1);
tip();
break;
}
case 2:
{
38、 Inorder(T1);
tip();
break;
}
case 3:
{
Postorder(T1);
tip();
break;
}
case 4:
{
z=Leaf_Sum(T1);
printf("此二叉树的长度为:%d\n",z);
tip();
break;
}
case 0:t=0;break;
default :
{printf("你输入的数据有误,请重新输入:\n");
tip();
39、break;
}
}
}
return 0;
}
BTtree Creat_BT(BTtree T)
{
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
if(!(T=(BTnode *)malloc(sizeof(BTnode))))
printf("error:\n");
T->data=ch;
T->lChild=Creat_BT(T->lChild);
T->rChild=Creat_BT(T->rChild);
}
return T;
40、
}
void Preorder(BTtree T1)
{
if(T1)
{
printf("%c\n",T1->data);
Preorder(T1->lChild);
Preorder(T1->rChild);
}
}
void Inorder(BTtree T1)
{
if(T1)
{
Inorder(T1->lChild);
printf("%c\n",T1->data);
Inorder(T1->rChild);
}
}
void Postorder(BTtree T1)
{
if(T1)
41、 {
Postorder(T1->lChild);
Postorder(T1->rChild);
printf("%c\n",T1->data);
}
}
int Leaf_Sum(BTtree T1)
{
if(!T1)
return 0;
else if(T1->lChild==NULL&&T1->rChild==NULL)
return 1;
else
return Leaf_Sum(T1->lChild)+Leaf_Sum(T1->rChild);
}
void tip()
{
printf("1、先序遍历\ 42、n2、中序遍历\n3、后序遍历\n4、叶子节点个数\n0、退出\n请输入操作:");
}
第六次作业
#include 43、 int arcs[MAX_VEX][MAX_VEX];
int vexnum,arcnum;
}Graph;
void CreateUDN(Graph &G);
void DFS(Graph G,int k);
void BFS(Graph G);
int Locate(Graph G,char c);
int FirstVex(Graph G,int k);
int NextVex(Graph G,int i,int j);
void InitQueue(Queue Q);
void EnQueue(Queue Q,int e);
void DeQueue( 44、Queue Q,int &e);
void tip();
int main()
{
int j;
Graph G;
CreateUDN(G);
tip();
scanf("%d",&j);
while(j)
{
switch(j)
{
case 1:
{
printf("\n深度优先遍历: ");
BFS(G);
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 2:
{
45、
printf("\n广度优先遍历: ");
DFS(G,-1);
printf("操作完成\n");
tip();
scanf("%d",&j);
break;
}
case 0:j=0;break;
default :
{
printf("输入有误,请重新输入\n");
tip();
scanf("%d",&j);
break;
}
}
}
printf("\n程序结束.\n");
return 0;
}
46、void CreateUDN(Graph &G)
{
int i,j,w,s1,s2;
char a,b,temp;
printf("输入顶点数和弧数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
temp=getchar();
G.vexs=(char *)malloc(G.vexnum*sizeof(char));
printf("输入%d个顶点.\n",G.vexnum);
for(i=0;i 47、i]);
temp=getchar();
}
for(i=0;i 48、cs[s1][s2]=G.arcs[s2][s1]=w;
}
}
void DFS(Graph G,int k)
{
int i;
if(k==-1)
{
for(i=0;i 49、
}
}
void BFS(Graph G)
{
int k;
Queue Q;
InitQueue(Q);
for(int i=0;i 50、 if(!visited[w])
{
visited[w]=true;
printf("%c ",G.vexs[w]);
EnQueue(Q,w);
}
}
}
}
int Locate(Graph G,char c)
{
for(int i=0;i






