數據結構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;
}