当前位置:首页 » 编程语言 » 数据结构c语言版习题

数据结构c语言版习题

发布时间: 2022-10-11 11:13:58

❶ 严蔚敏《数据结构(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;
}

热点内容
淘宝网怎么上传宝贝 发布:2024-12-22 16:30:53 浏览:753
服务器gps是什么意思 发布:2024-12-22 16:10:43 浏览:996
iqoo安卓11变声器在哪里 发布:2024-12-22 15:46:45 浏览:252
ie锁定初始密码在哪里找 发布:2024-12-22 15:44:48 浏览:296
linuxtcp窗口 发布:2024-12-22 15:34:24 浏览:948
安卓官翻机和原装有什么区别 发布:2024-12-22 15:34:24 浏览:662
linux挂载的磁盘 发布:2024-12-22 15:34:23 浏览:234
密码不允许含有字符是什么意思 发布:2024-12-22 15:30:15 浏览:169
图片压缩求 发布:2024-12-22 15:05:28 浏览:781
我的世界tis服务器怎么加 发布:2024-12-22 14:48:09 浏览:579