数据结构c语言版习题
❶ 严蔚敏《数据结构(c语言版)习题集》答案
啊?那本书不难啊,就是有点乱有点旧。
你考哪里啊?中科院吗?
其实最好不要拘泥与参考书,考研给的参考书都比较垃圾,必须自己加点别的。现在还有时间,你可以多看几本比较一下。
❷ 数据结构(C语言版)题:由一个栈的输入序列12345,设计算法,分别输出54321和32145。
54321:1~5这5个数连续进栈后再5个数连续出栈,用2个循环就可以了
32145:1~3这3个数连续进栈后再3个数连续出栈,也可以用2个循环,然后是4进4出,5进5出
❸ 数据结构(C语言版)题目,大神来
Prim算法:
intMap[10][10];
intdis[10],vis[10],F[10];
voidPrim(){
memset(vis,0,sizeof(vis));
intans=0;vis[1]=1;
for(inti=2;i<=7;i++){dis[i]=Map[i][1]!=-1?Map[i][1]:INF;F[i]=1;}
for(inti=2;i<=7;i++){
intMin=INF,p;
for(intj=1;j<=7;j++)if(!vis[j]&&dis[j]<Min)
Min=dis[p=j];
vis[p]=1;ans+=Min;
cout<<"加边:("<<p<<","<<F[p]<<")边权:"<<Map[p][F[p]]<<endl;
for(intj=1;j<=7;j++)if(!vis[j]&&Map[p][j]!=-1)
if(Map[p][j]<dis[j]){
dis[j]=Map[p][j];
F[j]=p;
}
}
cout<<"总权值:"<<ans<<endl;
}
intmain(){
memset(Map,-1,sizeof(Map));
while(true){
inta,b;cin>>a>>b;if(a==-1&&b==-1)break;
intc;cin>>c;Map[a][b]=Map[b][a]=c;
}
Prim();
return0;
}
输入及运行结果:
输入:
166
1220
1719
6717
659
2717
5719
2316
7315
7420
5424
3413
-1-1
结果:
加边:(6,1)边权:6
加边:(5,6)边权:9
加边:(7,6)边权:17
加边:(3,7)边权:15
加边:(4,3)边权:13
加边:(2,3)边权:16
总权值:76
Kruskal算法:
structEdge{
intu,v,w;
booloperator<(constEdge&a)const{
returnw<a.w;
}
};
Edgeedge[100];inttot=0;
intpre[100];
intFind(intx){
returnx==pre[x]?x:pre[x]=Find(pre[x]);
}
voidKruskal(){
for(inti=0;i<=7;i++)pre[i]=i;
sort(edge,edge+tot);
intcnt=1,ans=0;
for(inti=0;i<tot;i++){
if(cnt==7)break;
intu=edge[i].u,v=edge[i].v,w=edge[i].w;
intfu=Find(u),fv=Find(v);
if(fu==fv)continue;
pre[fu]=fv;cnt++;ans+=w;
cout<<"加边("<<u<<","<<v<<")"<<"边权:"<<w<<endl;
}
cout<<"总的权值:"<<ans<<endl;
}
intmain(){
while(true){
inta,b;cin>>a>>b;if(a==-1&&b==-1)break;
intc;cin>>c;edge[tot++]=(Edge){a,b,c};
}
Kruskal();
return0;
}
输入及运行结果:
输入:
166
1220
1719
6717
659
2717
5719
2316
7315
7420
5424
3413
-1-1
结果:
加边(1,6)边权:6
加边(6,5)边权:9
加边(3,4)边权:13
加边(7,3)边权:15
加边(2,3)边权:16
加边(6,7)边权:17
总的权值:76
❹ 下面这是严蔚敏《数据结构C语言版》习题集6.36的答案,这是类C,还是纯C语言,还是C++
基本上就是C语言,返回值它直接写了一个Status,程序里的返回值是TRUE和FALSE,如果把STATUS改成BOOL就是标准的C语言了。C语言是C++的一个子集,这个程序也可以认为是C++写的。
❺ c语言编程 数据结构题
栈先进后出,队列先进先出,队列的顺序等价于栈的出栈顺序。写了个简单的验证程序,初始的出栈顺序必须无误
#include<iostream>
usingstd::cout;
//iStack元素值有序,简化了编程,否则就要借助于下标的有序性
//'g'作为一个额外的标记,取到此值时,表示所有元素都已入栈
chariStack[]={'a','b','c','d','e','f','g'};
charoStack[]={'b','d','f','e','c','a'};
intno=1;
//sp用于指示iStack未入栈的元素
intsp=0;
charTop()
{
returniStack[sp];
}
//ch及之前元素入栈
voidPush(charch)
{
charcc=Top();
while(cc<=ch)
{
printf("(%2d)Push: %c
",no++,cc);
sp++;
cc=Top();
}
}
voidPop(charch)
{
if(ch>=Top()) //当前要出栈的元素未入栈
Push(ch);
printf("(%2d)Pop: %c
",no++,ch);
}
intmain()
{
intcount=0;
intlen=sizeof(oStack);
//1
printf("入栈顺序:
");
for(inti=0;i<len;i++)
printf("%c",iStack[i]);
printf("
");
//2
printf("出栈顺序:
");
for(inti=0;i<len;i++)
printf("%c",oStack[i]);
printf("
");
//3
printf("出入栈操作:
");
while(count<len)
{
Pop(oStack[count]);
count++;
}
return0;
}
❻ c语言数据结构题
这是按题目要求写的,有任何问题追问
#include<stdio.h>
typedefintStackDataType;
typedefstruct_StackData{
StackDataTypedata;
_StackData*up;
_StackData*next;
}StackData;
typedefstruct_Stack{
_StackData*head;
_StackData*last;
intlength;
}Stack;
voidinitStack(Stack*s)
{
s->head=0;
s->last=0;
s->length=0;
}
voidpush(Stack*s,StackDataTypedat)
{
StackData*curr;
if(!s->last)
{
s->head=s->last=newStackData;
curr=s->last;
curr->up=0;
}
else
{
curr=s->last;
curr->next=s->last=newStackData;
s->last->up=curr;
curr=s->last;
}
curr->next=0;
curr->data=dat;
s->length++;
}
intpop(Stack*s,StackDataType*pdat)
{
StackData*curr;
if(!s->last)return0;
curr=s->last;
if(curr->up)
{
s->last=curr->up;
s->last->next=0;
}
else
{
s->head=s->last=0;
}
*pdat=curr->data;
delete[]curr;
s->length--;
return1;
}
voidfreeStack(Stack*s)
{
StackData*curr,*curr2;
curr=s->head;
while(curr)
{
curr2=curr->next;
delete[]curr;
curr=curr2;
}
s->head=0;
s->last=0;
s->length=0;
}
voidmain()
{
inti,dat;
Stacks1,s2;
initStack(&s1);//初始化栈1
initStack(&s2);//初始化栈2
for(i=1;i<=5;i++)
{
push(&s1,i);//栈1分别入栈数据12345
}
for(i=0;i<5;i++)
{
pop(&s1,&dat);//栈1出栈
push(&s2,dat);//栈2入栈
}
for(i=0;i<5;i++)
{
if(i)printf("");//显示第一个数据前面不加空格
pop(&s2,&dat);//栈2出栈
printf("%d",dat);//显示栈2出栈的数据
}
freeStack(&s1);//释放栈1内存,如果数据未全部出栈,会把未释放的内存释放
freeStack(&s2);//释放栈2内存,如果数据未全部出栈,会把未释放的内存释放
}
❼ 数据结构(C语言)题:广义表((a,b),c,d)的表头是( )。
对广义表来说,你看表头和表尾只要把最外面的一个括号里的所有元素同等对待,就算里面还有广义表你也把它当为单个元素看待,这样就明了了,里面三个元素,(a,b),c,d,因此表头是(a,b),表尾是d~~
❽ 严蔚敏数据结构c语言版 习题上自己做了跟答案不太一样 不知道对不对
我觉得没什么问题。
检查当前节点:
如果跟后面节点相等,删除后面的节点;否则检查后面的节点,直到最后一个节点。
❾ 数据结构上机题c语言
#include<stdio.h>
voidMergeArr(inta[],intm,intb[],intn,intc[])
{
inti=0,j=0,k=0;
while(i<m&&j<n)
{
if(a[i]<b[j])
c[k++]=a[i++];
else
c[k++]=b[j++];
}
while(i<m)
c[k++]=a[i++];
while(j<n)
c[k++]=b[j++];
}
intmain()
{
inti;
//用数组表示顺序表
intA[4]={2,5,9,10};
intB[6]={1,3,4,7,8,12};
intC[10]={0};
MergeArr(A,4,B,6,C);
for(i=0;i<10;++i)
printf("%d",C[i]);
return0;
}