锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
#include<iostream>
#include<stdlib.h>//浜х敓闅忔満鏁扮粍鐢?br />#include<time.h> //鍚屼笂
聽#include<list>
{
public:
聽聽聽 int m_beginVex;
聽聽聽 int m_endVex;
聽聽聽 int m_weight;
聽聽聽 MyArc(int beginVex,int endVex,int weight);
聽聽聽 MyArc(){}
聽聽聽 bool operator < (const MyArc& arc)
聽聽聽 {
聽聽聽聽聽聽聽 return m_weight<arc.m_weight;
聽聽聽 }
聽聽聽 bool operator == (const MyArc& arc)
聽聽聽 {
聽聽聽聽聽聽聽 return m_weight==arc.m_weight;
聽聽聽 }
聽聽聽 bool operator > (const MyArc& arc)
聽聽聽 {
聽聽聽聽聽聽聽 return m_weight>arc.m_weight;
聽聽聽 }
}聽 ;
{}
//2) 琛ㄧず鍥劇殑閭繪帴鐭╅樀綾籊raph:
class Graph
{
public:
聽聽聽 int m_vexnum;
聽聽聽 int m_arcnum;
聽聽聽 int *m_pmatrix;
public:
聽聽聽 ~Graph();
聽聽聽 Graph(int vexnum);
聽聽聽 Graph(int vexnum,int *pmatrix);
聽聽聽 void insert(MyArc arc);//鎸夋潈鍊煎ぇ灝忔帓搴忔彃鍏?br />聽聽聽 bool bound(int x);聽聽 //鍒ゆ柇欏剁偣x鏄惁宸蹭笌鍏跺畠欏剁偣榪為?br />};
//鏋勯犲嚱鏁?br />Graph::Graph(int vexnum)
{
聽聽聽 m_pmatrix=new int[vexnum*vexnum];
聽聽聽 m_vexnum=vexnum;m_arcnum=0;
聽聽聽 for(int i=0;i<vexnum*vexnum;++i)
聽聽聽 m_pmatrix[i]=0;
{
聽聽聽 m_vexnum=vexnum;
聽聽聽 // m_arcnum=arcnum;
聽聽聽 m_pmatrix=new int[m_vexnum*m_vexnum];
聽聽聽 for(int i=0;i<m_vexnum*m_vexnum;++i)
聽聽聽聽聽聽聽 m_pmatrix[i]=pmatrix[i];
}
{
聽聽聽 for(int i=0;i<m_vexnum;++i) if(m_pmatrix[x+i*m_vexnum]!=0) return true;
聽聽聽 return false;
}
void Graph::insert(MyArc arc)
{
聽聽聽 m_pmatrix[arc.m_beginVex*m_vexnum+arc.m_endVex]=arc.m_weight;
聽聽聽 m_pmatrix[arc.m_endVex*m_vexnum+arc.m_beginVex]=arc.m_weight;
聽聽聽 ++m_arcnum;
}
//鏋愭瀯
Graph::~Graph()
{
聽聽聽 delete[] m_pmatrix;
}
//3) 鎸夋潈瀛樺偍杈圭殑鏈夊簭闃熷垪綾籑yQueues:
class MyQueues
{
public:
聽聽聽 list<MyArc> m_list;
聽聽聽 MyQueues(){}
聽聽聽 void insert(const MyArc& arc);//杈規寜鏉冨兼彃鍏ラ槦鍒椾腑鍚堥備綅緗?
聽聽聽 void InsertGraph(const Graph &graph);//灝嗗浘鐨勮繛閫氬垎閲忔彃鍏ラ槦鍒?br />聽聽聽 MyArc pop();
};
//杈瑰嚭闃?br />MyArc MyQueues::pop()
{
聽聽聽 MyArc arc=m_list.front();
聽聽聽 m_list.pop_front();
聽聽聽 return arc;
}
//杈規寜鏉冨兼彃鍏ラ槦鍒椾腑鍚堥備綅緗?
void MyQueues::insert(const MyArc& arc)
{
聽聽聽 list<MyArc>::iterator pos;
聽聽聽 pos=m_list.begin();
聽聽聽 while(pos!=m_list.end())
聽聽聽 {
聽聽聽聽聽聽聽 if(*pos>arc) break;
聽聽聽聽聽聽聽 else ++pos;
聽聽聽 }
聽聽聽 m_list.insert(pos,arc);
}
//灝嗗浘鐨勮繛閫氬垎閲忔彃鍏ラ槦鍒?br />void MyQueues::InsertGraph(const Graph &graph)
{
聽聽聽 for(int i=0;i<graph.m_vexnum;++i)
聽聽聽 {
聽聽聽聽聽聽聽 for(int j=i+1;j<graph.m_vexnum;++j)
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(graph.m_pmatrix[i*graph.m_vexnum+j]) insert(MyArc(i,j,graph.m_pmatrix[i*graph.m_vexnum+j]));
聽聽聽 }
}
{
聽聽聽 list<int> my_list;
聽聽聽 my_list.push_back(arc.m_beginVex);
聽聽聽 int *ps=new int[graph.m_vexnum];
聽聽聽 for(int i=0;i<graph.m_vexnum;++i)
聽聽聽聽聽聽聽 ps[i]=0;
聽聽聽 while(!my_list.empty())
聽聽聽 {
聽聽聽聽聽聽聽 int x=my_list.front();
聽聽聽聽聽聽聽 ps[x]=1;
聽聽聽聽聽聽聽 my_list.pop_front();
聽聽聽聽聽聽聽 for(int i=0;i<graph.m_vexnum;++i)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(graph.m_pmatrix[i+x*graph.m_vexnum]!=0)
聽聽聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if(i==arc.m_endVex) return true;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if(ps[i]!=1) my_list.push_back(i);
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 delete[] ps;
聽聽聽 return false;
}
//4) kruskal綆楁硶:
void kruskal(const Graph& graph,Graph& smtree)
{
聽聽聽 MyQueues arcqueues;//淇濆瓨浠庡皬鍒板ぇ鎺掑垪鐨勮竟
聽聽聽 arcqueues.InsertGraph(graph);
聽聽聽 MyArc myarc;//Arc琛ㄧず杈圭殑綾誨瀷
聽聽聽 int arcnum=0; //杈圭殑涓暟
聽聽聽 while(arcnum<graph.m_vexnum-1)
聽聽聽 {
聽聽聽聽聽聽聽 myarc=arcqueues.pop();
聽聽聽聽聽聽聽 if(!IsCycle(smtree,myarc))
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 smtree.insert(myarc);
聽聽聽聽聽聽聽聽聽聽聽聽聽 ++arcnum;
聽聽聽聽聽聽聽 }
聽聽聽 }
}
void SetMatrix(int vexnum,int *pmatrix)
{
聽聽聽 srand((unsigned)time(NULL));
聽聽聽 for(int i=0;i<vexnum;++i)//浜х敓闅忔満鏉冨肩煩闃?br />聽聽聽 {
聽聽聽聽聽聽聽 for(int j=i;j<vexnum;++j)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(j==i)
聽聽聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pmatrix[i*vexnum+j]=0;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 continue;
聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽 int rnum=rand();rnum%=99;rnum++;//浜х敓1~99鐨勯殢鏈烘暣鏁頒綔涓鴻竟鐨勬潈鍊?br />聽聽聽聽聽聽聽聽聽聽聽聽聽 pmatrix[i*vexnum+j]=rnum;
聽聽聽聽聽聽聽聽聽聽聽聽聽 pmatrix[j*vexnum+i]=rnum;
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 cout<<"***闅忔満浜х敓鐨勫悇杈規潈鍊肩煩闃?[欏剁偣鏁頒負 "<<vexnum<<"] ****\n";
聽 for(int i=0;i<vexnum;++i)//杈撳嚭闅忔満鏉冨肩煩闃?br />聽聽聽 {
聽聽聽聽聽聽聽 for(int j=0;j<vexnum;++j)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽 cout<<pmatrix[i*vexnum+j]<<"\t";
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 cout<<endl;
聽聽聽 }
}
void SmallestTreeOutput(const Graph& smtree)
{
聽聽聽 cout<<"鏈灝忕敓鎴愭爲:"<<endl;
聽聽聽 for(int i=0;i<smtree.m_vexnum;++i)//杈撳嚭鏈灝忔爲
聽聽聽聽聽聽聽 for(int j=i+1;j<smtree.m_vexnum;++j)
聽聽聽聽聽聽聽聽聽聽聽聽聽 if(smtree.m_pmatrix[i*smtree.m_vexnum+j])
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 cout<<'('<<i<<','<<j<<','<<smtree.m_pmatrix[i*smtree.m_vexnum+j]<<')'<<endl;
}
聽
void main()
{
聽聽聽 char i;
聽聽聽 cout<<"璇瘋緭鍏ラ《鐐規暟鐩?";
聽聽聽 cin>>i;
聽 int vex=i-'0';
聽聽聽 int *matrix=new int[vex*vex];
聽聽聽 cout<<endl;
聽聽聽 SetMatrix(vex,matrix);
聽聽聽 Graph graph(vex,matrix),smtree(vex);
聽聽聽 kruskal(graph,smtree);
聽聽聽 SmallestTreeOutput(smtree);
聽聽聽 delete []matrix;
}
緇撴灉杈撳嚭錛?br />璇瘋緭鍏ラ《鐐規暟鐩?6
***闅忔満浜х敓鐨勫悇杈規潈鍊肩煩闃?[欏剁偣鏁頒負 6] ****
0聽聽聽聽聽聽 64聽聽聽聽聽 7聽聽聽聽聽聽 15聽聽聽聽聽 22聽聽聽聽聽 43
64聽聽聽聽聽 0聽聽聽聽聽聽 72聽聽聽聽聽 86聽聽聽聽聽 53聽聽聽聽聽 40
7聽聽聽聽聽聽 72聽聽聽聽聽 0聽聽聽聽聽聽 53聽聽聽聽聽 37聽聽聽聽聽 22
15聽聽聽聽聽 86聽聽聽聽聽 53聽聽聽聽聽 0聽聽聽聽聽聽 87聽聽聽聽聽 82
22聽聽聽聽聽 53聽聽聽聽聽 37聽聽聽聽聽 87聽聽聽聽聽 0聽聽聽聽聽聽 9
43聽聽聽聽聽 40聽聽聽聽聽 22聽聽聽聽聽 82聽聽聽聽聽 9聽聽聽聽聽聽 0
鏈灝忕敓鎴愭爲:
(0,2,7)
(0,3,15)
(0,4,22)
(1,5,40)
(4,5,9)
#include<stdio.h>
#define MAX 50
int cycle(char *s)
{
聽 char *h,*t;
聽 for(h=s,t=s+strlen(s)-1;t>h;h++,t--)
聽 {
聽聽聽 if(*h!=*t)
聽聽聽 {
聽聽聽聽聽聽聽 printf("%c",h);
聽聽聽聽聽聽聽 break;
聽聽聽 }
聽 }
聽 return t<=h;
}
main()
{
聽 char s[MAX];
聽 while(1)
聽 {
聽聽聽 puts("Please input the string you want to judge(input ^ to quit):");
聽聽聽 scanf("%s",s);
聽聽聽 if(s[0]=='^')
聽聽聽聽聽 break;
聽聽聽 if(cycle(s))
聽聽聽 printf("%s is a cycle string.\n",s);
聽聽聽 else
聽聽聽 printf("%s is not a cycle string.\n",s);
聽 }
聽 puts("\nThank you for you using ,bye bye!\n");
}
杈撳嚭緇撴灉錛?br />
Please input the string you want to judge(input ^ to quit):
abcabc
聽abcabc is not a cycle string.
Please input the string you want to judge(input ^ to quit):
abccba
abccba is a cycle string.
Please input the string you want to judge(input ^ to quit):
聽
聽
聽聽聽聽 printf("Enter another character and tow integers;\n");
聽聽聽聽 printf("Enter a newline to quit.\n");
聽 }
聽 printf("Bye.\n");
聽 return 0;
}
void display(char cr,int lines,int width)
{
聽 int row ,col;
聽 for(row =1;row<=lines;row++)
聽 {
聽聽聽 for(col=1;col<=width;col++)
聽聽聽 {
聽聽聽聽聽 putchar(cr);
聽聽聽聽聽聽 }
聽聽聽聽聽 putchar('\n');
聽 }
}
緇撴灉杈撳嚭錛?br />
Enter a character and tow integers:
d 3 2
dd
dd
dd
Enter another character and tow integers;
Enter a newline to quit.
Bye.
Press any key to continue...
銆鍙互鐪嬭绱ц窡鍦?鍚庨潰鐨勯偅涓崲琛岀錛宻canf()鍑芥暟灝嗚鎹㈣絎︾暀鍦ㄤ簡杈撳叆闃熷垪涓紟鑰実etchar()騫朵笉璺寵繃鎹㈣絎︼紝鎵浠ュ湪寰幆鐨?br />涓嬩竴鍛ㄦ湡錛屽湪浣犳湁鏈轟細杈撳叆鍏朵粬鍐呭涔嬪墠錛岃繖涓崲琛岀鐢眊etchar()璇誨嚭錛岀劧鍚庡皢鍏惰祴鍊肩粰ch錛岃宑h涓烘崲琛岀姝f槸緇堟寰幆鐨勬潯浠訛紟
銆瑕佽В鍐寵繖涓棶棰橈紝蹇呴』璺寵繃涓涓緭鍏ュ懆鏈熶腑閿叆鐨勬渶鍚庝竴涓暟瀛椾笌涓嬩竴琛屽紑濮嬪閿叆鐨勫瓧絎︿箣闂寸殑鎵鏈夋崲琛岀鎴栫┖鏍鹼紟
鏀硅繘濡備笅錛?strong>char2.cpp
/*C璇█涓涓狪/O闂紼嬪簭淇敼鐗堟湰*/
#include<stdio.h>
void display(char cr,int lines,int width);
int main(void)
{
聽 int ch;
聽 int rows,cols;
聽 printf("Enter a character and tow integers:\n");
聽 while((ch=getchar())!='\n')
聽 {
聽聽聽 if( scanf("%d %d",&rows,&cols)!=2)
聽聽聽 break;
聽聽聽聽 display(ch,rows,cols);
聽聽聽聽 while(getchar()!='\n')聽聽聽聽聽 /*鍓旈櫎鎺塻canf()杈撳叆鍚庣殑鎵鏈夊瓧絎︼紟*/
聽聽聽聽 {
聽聽聽聽聽聽聽 printf("1");聽聽聽聽聽聽聽聽聽 /*鍚庨潰鏈夊灝戝瓧絎﹀氨杈撳嚭澶氬皯涓?*/
聽聽聽聽聽聽聽 continue;
聽聽聽聽 }
聽聽聽聽 printf("Enter another character and tow integers;\n");
聽聽聽聽 printf("Enter a newline to quit.\n");
聽 }
聽 printf("Bye.\n");
聽 return 0;
}
void display(char cr,int lines,int width)
{
聽 int row ,col;
聽 for(row =1;row<=lines;row++)
聽 {
聽聽聽 for(col=1;col<=width;col++)
聽聽聽 {
聽聽聽聽聽 putchar(cr);
聽聽聽聽聽聽 }
聽聽聽聽聽 putchar('\n');
聽 }
}
杈撳嚭緇撴灉錛?br />Enter a character and tow integers:
d 3 4
dddd
dddd
dddd
Enter another character and tow integers;
Enter a newline to quit.
d 3 4
dddd
dddd
dddd
11Enter another character and tow integers;
Enter a newline to quit.
聽
聽
聽
聽
銆棣栧厛錛?/span>
main()
浣跨敤鍙傛暟
1
璋冪敤浜嗗嚱鏁?/span>
up_and_down()
錛屼簬鏄?/span>
up_and_down()
涓艦寮忓弬鏁?/span>
n
鐨勫兼槸
1,
鏁呮墦鍗拌鍙?/span>
#1
杈撳嚭浜?/span>
Level1
銆?br />鐒跺悗錛岀敱浜?/span>
n
鐨勬暟鍊煎皬浜?/span>
4
錛屾墍浠?/span>
up_and_down()
錛堢
1
綰э級浣跨敤鍙傛暟
n+1
鍗蟲暟鍊?/span>
2
璋冪敤浜?/span>
up_and_down()(
絎?/span>
2
綰?/span>
).
浣垮緱
n
鍦ㄧ
2
綰ц皟鐢ㄤ腑琚祴鍊?/span>
2,
鎵撳嵃璇彞
#1
杈撳嚭鐨勬槸
Level2
銆備笌涔嬬被浼鹼紝涓嬮潰鐨勪袱嬈¤皟鐢ㄥ垎鍒墦鍗板嚭
Level3
鍜?/span>
Level4
銆?br />
銆褰撳紑濮嬫墽琛岀
4
綰ц皟鐢ㄦ椂錛?/span>
n
鐨勫兼槸
4
錛屽洜姝?/span>
if
璇彞鐨勬潯浠朵笉婊¤凍銆傝繖鏃跺欎笉鍐嶇戶緇皟鐢?/span>
up_and_down()
鍑芥暟銆傜
4
綰ц皟鐢ㄦ帴
鐫鎵ц鎵撳嵃璇彞
#2
錛屽嵆杈撳嚭
Level4
錛屽洜涓?/span>
n
鐨勫兼槸
4
銆傜幇鍦ㄥ嚱鏁伴渶瑕佹墽琛?/span>
return
璇彞錛屾鏃剁
4
綰ц皟鐢ㄧ粨鏉燂紝鎶婃帶鍒舵潈榪斿洖緇欒
鍑芥暟鐨勮皟鐢ㄥ嚱鏁幫紝涔熷氨鏄
3
綰ц皟鐢ㄥ嚱鏁般傜
3
綰ц皟鐢ㄥ嚱鏁頒腑鍓嶄竴涓墽琛岃繃鐨勮鍙ユ槸鍦?/span>
if
璇彞涓繘琛岀
4
綰ц皟鐢ㄣ傚洜姝わ紝瀹冪戶
緇墽琛屽叾鍚庣戶浠g爜錛屽嵆鎵ц鎵撳嵃璇彞
#2
錛岃繖灝嗕細杈撳嚭
Level3
錛庡綋絎?/span>
3
綰ц皟鐢ㄧ粨鏉熷悗錛岀
2
綰ц皟鐢ㄥ嚱鏁板紑濮嬬戶緇墽琛岋紝鍗寵緭鍑?br />
Level2
錛庝緷嬈$被鎺紟
銆娉ㄦ剰錛屾瘡涓綰х殑閫掑綊閮戒嬌鐢ㄥ畠鑷繁鐨勭鏈夌殑鍙橀噺
n
錛庡彲浠ユ煡鐪嬪湴鍧鐨勫兼潵璇佹槑錛?br />
閫掑綊鐨勫熀鏈師鐞嗭細
錛戙姣忎竴嬈″嚱鏁拌皟鐢ㄩ兘浼氭湁涓嬈¤繑鍥烇紟褰撶▼搴忔祦鎵ц鍒版煇涓綰ч掑綊鐨勭粨灝懼鏃訛紝瀹冧細杞Щ鍒板墠涓綰ч掑綊緇х畫鎵ц錛?/span>
錛掋閫掑綊鍑芥暟涓紝浣嶄簬閫掑綊璋冪敤鍓嶇殑璇彞鍜屽悇綰ц璋冨嚱鏁板叿鏈夌浉鍚岀殑欏哄簭錛庡鎵撳嵃璇彞 #1 浣嶄簬閫掑綊璋冪敤璇彞鍓嶏紝瀹冩寜鐓ч?br />銆銆褰掕皟鐢ㄧ殑欏哄簭琚墽琛屼簡 4 嬈★紟
錛撱姣忎竴綰х殑鍑芥暟璋冪敤閮芥湁鑷繁鐨勭鏈夊彉閲忥紟
錛斻閫掑綊鍑芥暟涓紝浣嶄簬閫掑綊璋冪敤璇彞鍚庣殑璇彞鐨勬墽琛岄『搴忓拰鍚勪釜琚皟鐢ㄥ嚱鏁扮殑欏哄簭鐩稿弽錛?/span>
錛曘铏界劧姣忎竴綰ч掑綊鏈夎嚜宸辯殑鍙橀噺錛屼絾鏄嚱鏁頒唬鐮佸茍涓嶄細寰楀埌澶嶅埗錛?/span>
錛栥閫掑綊鍑芥暟涓繀欏誨寘鍚彲浠ョ粓姝㈤掑綊璋冪敤鐨勮鍙ワ紟
鍐嶇湅涓涓叿浣撶殑閫掑綊鍑芥暟璋冪敤鐨勪緥瀛愶細浠ヤ簩榪涘埗褰㈠紡杈撳嚭鏁存暟
/*杈撳叆涓涓暣鏁幫紝杈撳嚭浜岃繘鍒跺艦寮?/
#include<stdio.h>
void to_binary(unsigned long n);
int main(void)
{
聽 unsigned long number;
聽 printf("Enter an integer(q to quit):\n");
聽 while(scanf("%ul",&number)==1)
聽 {
聽聽聽 printf("Binary equivalent :");
聽聽聽 to_binary(number);
聽聽聽 putchar('\n');
聽聽聽 printf("Enter an integer(q to quit):\n");
聽 }
聽 printf("Done.\n");
聽 return 0;
聽
}
void to_binary(unsigned long n)聽聽聽 /*閫掑綊鍑芥暟*/
{
聽 int r;
聽 r=n%2;聽聽聽 /*鍦ㄩ掑綊璋冪敤涔嬪墠璁$畻n%2鐨勬暟鍊鹼紝鐒跺悗鍦ㄩ掑綊璋冪敤璇彞涔嬪悗榪涜杈撳嚭錛庤繖鏍?br />聽 銆銆銆銆銆銆璁$畻鍑虹殑絎竴涓暟鍊煎弽鑰屾槸鍦ㄦ渶鍚庝竴涓緭鍑?/
聽 if(n>=2)
聽 to_binary(n/2);
聽 putchar('0'+r);/*濡傛灉r鏄?錛岃〃杈懼紡'0'+r灝辨槸瀛楃'0'錛涘鏋渞鏄?錛屽垯琛ㄨ揪寮忕殑鍊間負
聽 銆銆銆銆銆銆銆銆銆'1'錛庢敞鎰忓墠鎻愭槸瀛楃'1'鐨勬暟鍊肩紪鐮佹瘮瀛楃'0'鐨勬暟鍊肩紪鐮佸ぇ1錛?br />聽 銆銆銆銆銆銆銆銆銆ASCII鍜孍BCDIC榪欎袱縐嶇紪鐮侀兘婊¤凍榪欎釜鏉′歡錛?/
聽 return;
}
聽
typedef struct
{
聽char ch[MaxSize];
聽int len;
}SqString;
int Index(SqString s,SqString t)/* 綆鍗曞尮閰嶆柟娉?/
{
聽 int i=0,j=0,k;
聽 while(i<s.len&&j<t.len)
聽 {
聽聽聽 if(s.ch[i]==t.ch[j])/*緇х畫鍖歸厤涓嬩竴涓瓧絎?/
聽{
聽聽 i++;
聽聽 j++;
聽}
聽else/*瀛愪覆銆佷富涓茬殑鎸囬拡鍥炴函閲嶆柊寮濮嬩笅涓嬈″尮閰?/
聽{
聽 i=i-j+1;
聽 j=0;
聽}
聽 }
聽 if(j>=t.len)/*鍖歸厤鎴愬姛錛岃繑鍥炲尮閰嶇殑絎竴涓瓧絎︿笅鏍?/
聽聽 k=i-t.len;
聽 else/*鍖歸厤涓嶆垚鍔?/
聽聽 k=-1;
聽 return k;
}
void GetNext(SqString t,int next[])/*鐢辨ā寮忎覆t姹傚嚭next鍊?/
{
聽int j,k;
聽j=0;k=-1;next[0]=-1;
聽while(j<t.len-1)
聽{
聽聽 if(k==-1||t.ch[j]==t.ch[k])
聽聽 {
聽聽聽聽 j++;k++;
聽聽聽聽 next[j]=k;
聽聽 }
聽聽 else k=next[k];
聽}
}
void GetNextval(SqString t,int nextval[])/*鐢辨ā寮忎覆t姹傚嚭nextval鍊?/
{
聽聽 int j=0,k=-1;
聽聽 nextval[0]=-1;
聽聽 while(j<t.len)
聽聽 {
聽聽聽 if(k==-1||t.ch[j]==t.ch[k])
聽聽聽 {
聽聽聽聽聽 j++;k++;
聽聽 if(t.ch[j]!=t.ch[k])
聽聽
聽聽聽 nextval[j]=k;
聽聽 else
聽聽聽聽聽聽 nextval[j]=nextval[k];
聽聽 }
聽聽 else k=nextval[k];
聽聽聽
聽聽 }
}
int KMPIndex(SqString s,SqString t)/*KMP綆楁硶*/
{
聽聽 int next[MaxSize];
聽聽 int i=0,j=0;
聽聽 int v;
聽聽 GetNext(t,next);
聽聽 while(i<s.len && j<t.len)
聽聽 {
聽聽聽聽 if(j==-1||s.ch[i]==t.ch[j])
聽聽聽聽 {
聽聽聽聽 聽i++;
聽聽聽聽 聽j++;
聽聽 }
聽聽 else j=next[j];
聽聽 }
聽聽 if(j>=t.len)
聽聽 v=i-t.len;
聽聽 else
聽聽 v=-1;
聽聽 return v;
}
int KMPIndex1(SqString s,SqString t)/*鏀硅繘鐨凨MP綆楁硶*/
{
聽int nextval[MaxSize],next[MaxSize],i=0,j=0,v;
聽GetNextval(t,next);
聽GetNextval(t,nextval);
聽while(i<s.len&&j<t.len)
聽{
聽 if(i==-1||s.ch[i]==t.ch[j])
聽 {
聽聽聽 i++;
聽j++;
聽 }
聽 else j=nextval[j];
聽}
聽if(j>=t.len)
聽 v=i-t.len;/*榪斿洖鍖歸厤妯″紡涓茬殑棣栧瓧絎︿笅鏍?/
聽else
聽 v=-1;
聽return v;
}
void StrAssign(SqString &str,char cstr[])/*鐢變覆甯擱噺cstr鍒涘緩涓瞫tr */
{
聽聽 int i;
聽聽 for(i=0;cstr[i]!='\0';i++)
聽聽聽 str.ch[i]=cstr[i];
聽聽 str.len=i;
}
void DispStr(SqString s)/*杈撳嚭涓瞫鐨勬墍鏈夊厓绱?/
{
聽 int i;
聽 if(s.len>0)
聽 {
聽聽聽 for(i=0;i<s.len;i++)
聽聽printf("%c",s.ch[i]);
聽printf("\n");
聽 }
}
void main()
{
聽 int j;
聽 int next[MaxSize],nextval[MaxSize];
聽 SqString s,t;
聽 StrAssign(s,"abcabcdabcdeabcdefabcdefg");
聽 StrAssign(t,"abcdeabcdefab");
聽 printf("涓瞫:");DispStr(s);
聽 printf("涓瞭:");DispStr(t);
聽 printf("綆鍗曞尮閰峆綆楁硶:\n");
聽 printf("t鍦╯涓殑浣嶇疆:%d\n",Index(s,t));
聽 GetNext(t,next);
聽 GetNextval(t,nextval);
聽 printf(" j聽聽聽聽 ");
聽 for(j=0;j<t.len;j++)
聽 {
聽聽 printf("%4d",j);
聽 }
聽 printf("\n");
聽 printf("t[j]聽聽 ");
聽 for(j=0;j<t.len;j++)
聽 printf("%4c",t.ch[j]);
聽 printf("\n");
聽 printf("next聽聽 ");
聽 for(j=0;j<t.len;j++)
聽 printf("%4d",next[j]);
聽聽 printf("\n");
聽聽
聽聽 printf("nextval");
聽聽 for(j=0;j<t.len;j++)
聽聽 printf("%4d",nextval[j]);
聽聽 printf("\n");
聽聽 printf("KMP綆楁硶:\n");
聽聽 printf("t鍦╯涓殑浣嶇疆:%d\n",KMPIndex(s,t));
聽聽 printf("鏀硅繘鐨凨MP綆楁硶:\n");
聽聽 printf("t鍦╯涓殑浣嶇疆:%d\n",KMPIndex1(s,t));
}
緇撴灉濡備笅錛?/strong>
涓瞫:abcabcdabcdeabcdefabcdefg
涓瞭:abcdeabcdefab
綆鍗曞尮閰峆綆楁硶:
t鍦╯涓殑浣嶇疆:7
聽j聽聽聽聽聽聽聽 0聽聽 1聽聽 2聽聽 3聽聽 4聽聽 5聽聽 6聽聽 7聽聽 8聽聽 9聽 10聽 11聽 12
t[j]聽聽聽聽聽 a聽聽 b聽聽 c聽聽 d聽聽 e聽聽 a聽聽 b聽聽 c聽聽 d聽聽 e聽聽 f聽聽 a聽聽 b
next聽聽聽聽 -1聽聽 0聽聽 0聽聽 0聽聽 0聽聽 0聽聽 1聽聽 2聽聽 3聽聽 4聽聽 5聽聽 0聽聽 1
nextval聽 -1聽聽 0聽聽 0聽聽 0聽聽 0聽 -1聽聽 0聽聽 0聽聽 0聽聽 0聽聽 5聽 -1聽聽 0
KMP綆楁硶:
t鍦╯涓殑浣嶇疆:7
鏀硅繘鐨凨MP綆楁硶:
t鍦╯涓殑浣嶇疆:7
澶у閲屽疄琛屽鍒嗗埗銆傛瘡闂ㄨ閮芥湁涓瀹氱殑瀛?/span>
鍒?/span>
銆傛瘡涓鐢熷潎闇瑕佷慨婊¤瀹氭暟閲忕殑璇劇▼鎵嶈兘姣曚笟銆傚叾涓湁浜涜紼嬪彲浠ョ洿鎺ヤ慨璇伙紝鏈変簺璇劇▼闇瑕佷竴瀹氱殑鍩虹鐭ヨ瘑錛屽繀欏誨湪閫変簡鍏朵粬涓浜涜紼嬬殑鍩虹涓婃墠鑳戒慨璇匯備緥濡傦紝銆婃暟鎹粨鏋勩嬪繀欏誨湪閫変慨浜嗐婇珮綰ц璦紼嬪簭璁捐銆嬩箣鍚庢墠鑳介変慨銆傛垜浠О銆婇珮綰ц璦紼嬪簭璁捐銆嬫槸銆婃暟鎹粨鏋勩嬬殑鈥滃厛淇鈥濄傚湪鎴戜滑鐨勫ぇ瀛﹂噷錛屽亣瀹?font color="#000000" size="2">姣忛棬璇劇殑鐩存帴鍏堜慨璇?span style="COLOR: red">鑷沖鍙湁涓闂紝涓ら棬璇懼彲鑳藉瓨鍦ㄧ浉鍚岀殑鍏堜慨璇?/font>銆備緥濡傦細
璇懼彿 |
鍏堜慨璇懼彿 |
瀛﹀垎 |
1 |
0 |
1 |
2 |
1 |
1 |
3 |
2 |
3 |
4 |
0 |
3 |
5 |
2 |
4 |
涓婁緥涓紝1鏄?span lang="EN-US">2鐨勫厛淇錛屽嵆濡傛灉瑕侀変慨2錛屽垯1蹇呭畾琚夈?span lang="EN-US">
瀛︾敓涓嶅彲鑳藉瀹屽ぇ瀛﹂噷寮璁劇殑鎵鏈夎紼嬶紝鍥犳姣忎釜瀛︾敓蹇呴』鍦ㄥ叆瀛︽椂閫夊畾鑷繁瑕佸鐨勮紼嬨傛瘡涓鐢熷彲閫夎紼嬬殑鎬繪暟鐩槸緇欏畾鐨勩傜幇鍦ㄨ浣犱滑灝忕粍緙栧啓涓涓滃鐢熼夎緋葷粺鈥濓紝浠繪剰緇欏畾涓縐嶈紼嬩綋緋伙紙鎬昏紼嬫暟錛岃紼嬩箣闂寸殑淇鍏堝悗鍒剁害鍏崇郴錛屽鐢熸瘯涓氳姹備慨鐨勮紼嬫暟鐩級錛岃緋葷粺鑳藉府鍔╁鐢熸壘鍑?span style="COLOR: red">涓縐?/font>閫夎鏂規錛屼嬌寰椾粬鑳藉緱鍒扮殑瀛﹀垎鏈澶?/font>錛屽茍涓斿繀欏繪弧瓚?span style="COLOR: red">鍏堜慨璇劇▼浼樺厛鐨勫師鍒?br />
鍏蜂綋瀹炵幇濡備笅錛?/span>聽
1. 聽聽聽聽聽聽聽聽 灝?b style="mso-bidi-font-weight: normal">璇劇▼浣撶郴瀛樻斁涓鴻紼嬩綋緋繪枃浠?/font> CourseHierarchy.txt 錛?/span>
2. 聽聽聽聽聽聽聽聽 灝?b style="mso-bidi-font-weight: normal">璇劇▼浣撶郴鏂囦歡 CourseHierarchy.txt 杞崲宸﹀瀛愬彸鍏勫紵浜屽弶鏍戣〃紺?/font>錛?/span>
3. 聽聽聽聽聽聽聽聽 鍦ㄦ鍩虹涓婂浜屽弶鏍戣繘琛屽厛搴忋佷腑搴忋佸悗搴忛亶鍘嗐?/font>
4.聽聽聽聽聽聽銆緇欏嚭鏈澶氬鍒嗛夎鏂規銆?/font>
灝嗚紼嬩綋緋繪枃浠惰漿鎹負浜屽弶鏍?/span>
鎬濇兂錛氫粠
CourseHierarchy.txt
澶撮儴寮濮嬫壂鎻忥紝絎竴涓厛淇涓?/span>
0
錛堝嵆娌℃湁鍏堜慨璇撅級鐨勮紼嬩負鏁存5浜屽弶鏍戠殑鏍硅妭鐐?/span>
i
銆備粠
CourseHierarchy.txt
澶撮儴寮濮嬫壂鎻忥紝鎵鏈?/span>
i
鐨勫悗緇紼嬩綔涓?/span>
i
鐨勫乏瀛愭爲錛涜紼嬩綋緋諱腑錛屽叾浠栧厛淇涓?/span>
0
鐨勮妭鐐癸紝鍙婂叾鍚庣畫璇劇▼鏋勬垚
i
鐨勫彸瀛愭爲銆傜涓涓厛淇涓?/span>
i
鐨勮妭鐐逛綔涓?/span>
i
鐨勫乏瀛愭爲鐨勬牴鑺傜偣
姝ラ
1
錛氫粠鏂囦歡
CourseHierarchy.txt
鐢熸垚璇劇▼閾捐〃
Course_Slist
錛堝弬鏁拌〃錛夈?/span>
姝ラ
2
錛氬皢鎸囬拡
CousreSystem_root
鎸囧紩鐨?/span>
璇劇▼閾捐〃閫掑綊杞崲涓鴻紼嬩綋緋諱簩鍙夋爲
瀹炵幇浠g爜
tree_binary.cpp
// tree_binary.cpp : 瀹氫箟鎺у埗鍙板簲鐢ㄧ▼搴忕殑鍏ュ彛鐐廣?br />//
#pragma once
#include <iostream>
#include <tchar.h>
//#include<fstream>
//#include<iostream>
//#include<cstdlib>
#include"tree_binaryHF.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
聽char file_name[20]="CourseHierarchy.txt";
聽LinkList L;//閾捐〃鐨勫ご鎸囬拡
聽LinkList T;//鏍戠殑鏍?br />聽cout<<"\t鏈▼搴忕殑浣滅敤鏄粠鏂囦歡(鏂囦歡鍐呭鍙寜闇姹傛敼鍐?"<<endl
聽聽<<"聽聽聽聽聽聽聽 涓鍙栦俊鎭紝鏀懼埌閾捐〃涓紝鏈鍚庣敓鎴愪簩鍙夋爲錛?<<endl
聽聽<<"聽聽聽聽聽聽聽 鐒跺悗鍏堝簭涓簭錛屽悗緇亶鍘嗕簩鍙夋爲."<<endl;
聽InitList(L);
聽cout<<"璇誨嚭鐨勬枃浠跺唴瀹?"<<endl;
聽OpenFile(L,file_name);
聽cout<<"鐢熸垚閾捐〃鍚庣殑緇撴灉:"<<endl;
聽PrintLinkLIst(L);
聽聽聽 CreateBiTree(L,T,0);//鐢熸垚浜屽弶鏍?br />聽cout<<"鍏堝簭閬嶅巻浜屽弶鏍戠殑緇撴灉:";
聽PreOrder(T);
聽cout<<endl<<"涓簭閬嶅巻浜屽弶鏍戠殑緇撴灉:";
聽InOrder(T);
聽cout<<endl<<"鍚庡簭閬嶅巻浜屽弶鏍戠殑緇撴灉:";
聽聽聽 BackOrder(T);
聽cout<<endl;
聽return 0;
}
聽
tree_binaryHF.h
#include"cao.hpp"
//*************************************//
//鎵撳紑鏂囦歡錛屽茍璇誨彇閲岄潰鐨勬墍鏈夊唴瀹?br />Status OpenFile(LinkList&L,char file_name[])//鐢變簬榪欓噷闇瑕佹妸鏁版嵁鎻掑叆閾捐〃涓?br />{
聽int CNum,CScore,PreScore;
聽ifstream in_stream;
聽in_stream.open(file_name);
聽if(in_stream.fail())//if the file is not opened successfully
聽{
聽聽cout<<"can't open the file of "<<file_name<<endl;
聽聽exit(0);
聽}
聽//i
聽cout<<"CNum"<<"\t"<<"PreScore"<<"\t"<<"CScore"<<endl;
聽while(in_stream>>CNum>>PreScore>>CScore)//璇誨彇涓変釜鏁版嵁(璇劇▼緙栫爜,瀛﹀垎,鍏堜慨璇?
聽{
聽聽cout<<CNum<<"\t"<<PreScore<<"\t"<<"\t"<<CScore<<endl;聽//鏀懼埌鑺傜偣涓?br />聽聽LinkInsert(L,CNum,PreScore,CScore);//insert the node to the linklist L
聽}
聽in_stream.close();
聽return OK;
}
Status InitList(LinkList &L)
{
聽L= (LinkList)malloc(sizeof(LNode));
聽if(!L)
聽聽return ERROR;
聽L->lchild=NULL;
聽L->rchild=NULL;
聽L->CNumber=0;
聽L->CScore=0;
聽L->PreCourse=0;
聽return OK;
}
Status LinkInsert(LinkList &L,Status CNum,Status PreCourse,Status CScore)//鎶婃柊寰楀埌鐨勭粨鐐規彃鍏ラ摼琛紝浠庡ご緇撶偣澶勬彃鍏?br />{
聽LinkList p;
聽p=(LinkList)malloc(sizeof(LNode));
聽if(!p)
聽聽return ERROR;
聽p->CNumber=CNum;
聽p->CScore=CScore;
聽p->PreCourse=PreCourse;
聽p->lchild=NULL;
聽p->rchild=L->rchild;
聽L->rchild=p;
聽return OK;
}
Status PrintLinkLIst(LinkList &L)//鎵撳嵃鏁翠釜閾捐〃錛屽彸鎸囬拡鎸囧悜鍚庣戶緇撶偣錛屽乏鎸囬拡絀?br />{
聽LinkList p;
聽p=L->rchild;
聽while(p)
聽{
聽聽cout<<p->CNumber<<"\t"<<p->PreCourse<<"\t"<<"\t"<<p->CScore<<endl;
聽聽p=p->rchild;
聽}
聽return OK;
}
Status CreateBiTree(LinkList &L,LinkList&T,Status c)
{
聽LinkList p;
聽//while(!EmptyLinkList(L))
聽//{
聽if(!(p=Serach(L,c)))
聽聽T=NULL;
聽else
聽{
聽聽T=p;//鐢熸垚鏍硅妭鐐?br />聽聽delet(L,c);//鍒犻櫎p緇撶偣
聽聽CreateBiTree(L,T->lchild,T->CNumber);//鏋勯犲乏瀛愭爲
聽聽CreateBiTree(L,T->rchild,T->PreCourse);//鏋勯犲彸瀛愭爲
聽}
聽//}
聽return OK;
}
LinkList Serach(LinkList &L,Status c)
{
聽LinkList head,next;
聽head=L;
聽next=head->rchild;
聽while(next&&(next->PreCourse!=c))
聽{
聽聽head=next;
聽聽next=next->rchild;
聽}
聽if(next==NULL)
聽聽return NULL;//娌℃湁鎵懼埌
聽else//鎵懼埌浜?br />聽聽return next;
}
void delet(LinkList &L,Status c)
{
聽LinkList head,next;
聽head=L;
聽next=head->rchild;
聽while(next&&(next->PreCourse!=c))
聽{
聽聽head=next;
聽聽next=next->rchild;
聽}
聽head->rchild=next->rchild;
聽//free(next);
}
Status EmptyLinkList(LinkList L)
{
聽if(L->rchild=NULL)
聽聽return OK;
聽else
聽聽return ERROR;
}
//鍏堝簭閬嶅巻鐨勯掑綊
void PreOrder(LinkList T)
{
聽if(T)
聽{
聽聽 //璁塊棶緇撶偣
聽 cout<<T->CNumber<<" ";
聽 PreOrder(T->lchild);聽聽 //閬嶅巻宸﹀瓙鏍?br />聽 PreOrder(T->rchild);聽聽 //閬嶅巻鍙沖瓙鏍?br />聽//cout<<endl;
聽}
}聽
//涓簭閬嶅巻鐨勯掑綊
void InOrder(LinkList T)
{
聽if(T)
聽{
聽 InOrder(T->lchild);聽聽 //閬嶅巻宸﹀瓙鏍?br />聽聽 //璁塊棶緇撶偣
聽 cout<<T->CNumber<<" ";
聽 InOrder(T->rchild);聽聽 //閬嶅巻鍙沖瓙鏍?br />聽}
}聽
//鍚庡簭閬嶅巻鐨勯掑綊
void BackOrder(LinkList T)
{
聽if(T)
聽{
聽 BackOrder(T->lchild);聽聽 //閬嶅巻宸﹀瓙鏍?br />聽 BackOrder(T->rchild);聽聽 //閬嶅巻鍙沖瓙鏍?br />聽 cout<<T->CNumber<<" ";
}
}聽
聽
cao.hpp
#include<fstream>
#include<iostream>
#include<cstdlib>
using namespace std;
typedef int Status;
#define OK聽聽 1
#define ERROR 0
typedef struct LNode聽聽聽聽聽聽聽聽聽聽聽聽
{
聽struct LNode *lchild;
聽struct LNode *rchild;聽
聽Status CNumber;
聽Status CScore;聽聽聽
聽Status PreCourse;
}LNode,*LinkList;
Status OpenFile(LinkList&L,char file_name[]);
//鎵撳紑鏂囦歡錛屽茍涓旀彃鍏ヨ妭鐐?br />//*************************//
LinkInsert(LinkList &L,Status CNum,Status CScore,Status PreScore);
//insert the node to the linklist L
//*************************//
Status InitList(LinkList &L);//鍒濆鍖栭摼琛?br />//****************************************//
Status PrintLinkList(LinkList &L);//杈撳嚭閾捐〃
//********************************//
LinkList Serach(LinkList &L,Status c);//鏌ユ壘鑺傜偣
//*********************************************//
void delet(LinkList&L,Status c);//鍒犻櫎鑺傜偣
//*************************************//
Status EmptyLinkList(LinkList L);//媯鏌ラ摼琛ㄦ槸鍚︿負絀猴紙娌$敤鍒幫級
//***********************************//
//鍏堝簭閬嶅巻浜屽弶鏍?br />void PreOrder(LinkList T);
//***********************************//
void InOrder(LinkList T);//涓簭閬嶅巻浜屽弶鏍?br />//*****************************//
void BackOrder(LinkList T);//鍚庣畫閬嶅巻浜屽弶鏍?br />
CourceSource.txt
1聽2聽2
2聽0聽1
3聽0聽4
4聽2聽1
5聽7聽1
6聽7聽6
7聽2聽2
聽聽聽 璁捐騫跺疄鐜伴瓟鐜嬭璦鐨勮В閲婂櫒錛屽叿浣撹姹傚涓嬶細澶у啓瀛楁瘝琛ㄧず欖旂帇璇█鐨勮瘝姹囷紱灝忓啓瀛楁瘝琛ㄧず浜虹殑璇嶆眹璇█錛涢瓟鐜嬭璦涓彲鍖呭惈鎷彿銆?/font>
聽聽聽 濡傦細鎴戜滑鏈夐瓟鐜嬭璦鐨勮В閲婅鍒欙細B錛?gt;tAdA錛汚->sae錛涘垯欖旂帇璇█ B(ehnxgz)B瑙i噴鎴恡saedsaeezegexenehetsaedsae銆?br />
瀹炵幇浠g爜濡備笅錛?br />
#include<stdlib.h>
#include<stdio.h>
#define STACK_INIT_SIZE 100 //瀛樺偍絀洪棿鍒濆鍒嗛厤閲?br />#define STACK_INCREMENT聽 10聽 //瀛樺偍絀洪棿鍒嗛厤澧為噺
#define OVERFLOW聽聽聽聽聽聽聽聽聽 1
#define OK聽聽聽聽聽聽聽聽聽 1
#define ERROR聽聽聽聽聽 0
#define TRUE聽聽聽聽聽聽聽 1
#define FALSE聽聽聽聽聽聽 0
typedef char聽聽聽聽聽 SElemType;
typedef char聽聽聽聽聽 QElemType;
typedef int聽聽聽聽 Status;
typedef struct{
聽SElemType *base;聽聽聽聽聽聽聽聽聽聽聽 //鏍堝熀鍧
SElemType *top;聽聽聽聽聽聽聽聽聽聽聽聽 //鏍堥《鍦板潃
聽int stacksize;
}SqStack;
typedef struct QNode{
聽QElemType data;
聽struct QNode *next;
}QNode,*QueuePtr;
typedef struct{
聽QueuePtr front;聽聽 //闃熷ご鎸囬拡
聽QueuePtr rear;聽聽聽 //闃熷熬鎸囬拡
}LinkQueue;
Status InitStack(SqStack &S)
//鏋勯犱竴涓┖鏍?br />{
聽S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(char));
聽if(!S.base)
聽聽exit (OVERFLOW);//瀛樺偍鍗曞厓鍒嗛厤澶辮觸
聽S.top=S.base;
聽S.stacksize=STACK_INIT_SIZE;
聽return OK;
}
Status Push(SqStack &S,SElemType e)
//鎻掑叆鍏冪礌e鏍堥《鍗曞厓
{
聽if(S.top-S.base>=S.stacksize)
聽{//鏍堟弧錛岃拷鍔犲瓨鍌ㄧ┖闂?br />聽聽S.base=(SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(char));
聽if(!S.base)
聽聽exit (OVERFLOW);//瀛樺偍鍗曞厓鍒嗛厤澶辮觸
聽S.top=S.base+S.stacksize;
聽S.stacksize+=STACK_INCREMENT;
聽}
聽*(S.top)=e;
聽S.top++;
聽return OK;
}
Status Pop(SqStack &S,SElemType& e)
//鑻ユ爤涓嶄負絀猴紝鍒欏垹闄鐨勬爤欏跺崟鍏冿紝鐢╡榪斿洖鍏跺?br />{
聽if(S.base==S.top)
聽聽return ERROR;
聽S.top--;
聽e=*(S.top);
聽return OK;
}
Status StackEmpty(SqStack S)
{
聽if(S.base==S.top)
聽聽return 0;
聽else
聽聽return 1;
}
Status InitQueue(LinkQueue &Q)
//鏋勯犱竴涓┖闃熷垪Q
{
聽Q.front=Q.rear=(QueuePtr)malloc(sizeof (QNode));
聽if(!Q.front)
聽聽exit (OVERFLOW);
聽Q.front->next=NULL;
聽return OK;
}
Status EnQueue (LinkQueue&Q,QElemType e)
//鎻掑叆鍏冪礌e涓篞鐨勬柊鐨勯槦灝懼厓绱?br />{
聽QueuePtr p;
聽p=(QueuePtr)malloc(sizeof (QNode));
聽p->data=e;
聽p->next=NULL;
聽Q.rear->next=p;
聽Q.rear=p;
聽return OK;
}
Status DeQueue (LinkQueue &Q,QElemType &e)
//鑻ラ槦鍒椾笉絀猴紝鍒欏垹闄鐨勯槦澶村厓绱狅紝鐢╡榪斿洖鍏跺鹼紝騫惰繑鍥濷K;
//鍚﹀垯榪斿洖ERROR
{
聽QueuePtr p;
聽if(Q.front==Q.rear)
聽聽return ERROR;
p=Q.front->next;
聽e=p->data;
聽Q.front->next=p->next;
聽if(p==Q.rear)
聽聽Q.rear=Q.front;
聽free(p);
聽return OK;
}
Status QueueEmpty(LinkQueue Q)
//鑻ラ槦鍒桻涓虹┖闃熷垪,鍒欒繑鍥濼RUE錛屽惁鍒欒繑鍥濬ALSE
{
聽if(Q.rear==Q.front)
聽聽return FALSE;
聽else
聽聽return TRUE;
}
void InStack(char fiend[],SqStack &S)
{
聽int m,i=0;
聽for(;fiend[i]!='\0';i++);//璁$畻fiend涓湁澶氬皯
聽for(m=i-1;m>=0;m--)
聽聽Push(S,fiend[m]);
}
void main()
{
聽char e,c,d;
聽SqStack S,zhan;
聽LinkQueue Q;
聽聽 InitQueue(Q);
聽char聽 mowang[]="B(ehnxgz)B";
聽printf("浣犳兂瑕佽В閲婄殑欖旂帇璇█涓猴細%s\n",mowang);
聽聽聽 char聽 B[]="tAdA";
聽InitStack(S);
聽InitStack(zhan);
聽InStack(mowang,S);//鍏ㄩ儴鍘嬭繘鏍堜腑
聽while(StackEmpty(S))//鍦ㄦ爤涓嶄負絀虹殑鎯呭喌涓?br />聽{
聽聽Pop(S,e);
聽聽if(e=='B')
聽聽InStack(B,zhan);
聽聽else
if(e=='(')//濡傛灉涓哄彸鎷彿錛屽垯杈撳嚭鎷彿涓墍鏈夊唴瀹?br />聽聽聽{
聽聽聽聽while(Pop(S,e)&&e!=')')//褰撲負宸︽嫭鍙鋒椂鍋滄
聽聽聽聽{
聽聽聽聽聽if(e!=')')
聽聽聽聽聽EnQueue (Q,e);
聽聽聽聽}
聽聽聽聽聽DeQueue (Q,c);//璇誨嚭闃熷垪涓涓涓厓绱?br />聽聽聽聽while(QueueEmpty(Q))
聽聽聽聽{
聽聽聽聽聽DeQueue (Q,d);//鍙栧嚭鍏冪礌
聽聽聽聽聽Push(zhan,c);
聽聽聽聽聽Push(zhan,d);
聽聽聽聽}
聽聽聽聽Push(zhan,c);//鍐嶆鍘嬪叆絎竴涓厓绱?br />聽聽聽//聽Pop(S,e);//鍘繪帀宸︽嫭鍙?br />聽聽聽}
聽}
聽printf("\n瑙i噴鐨勭粨鏋滀負:聽 ");
聽聽聽 while(StackEmpty(zhan))//鍦ㄦ爤涓嶄負絀虹殑鎯呭喌涓?br />聽{
聽
聽聽Pop(zhan,c);
聽聽if(c=='A')
printf("sae");
聽聽聽聽聽聽聽 else
聽聽聽聽 printf("%c",c);
聽聽}
聽聽printf("\n");
}
聽
void DispPoly(PolyNode *L)聽 //杈撳嚭澶氶」寮?br />{
聽PolyNode *p=L->next;
聽while (p!=NULL)
聽{
聽 printf("%g,%d;",p->coef,p->exp);
聽 p=p->next;
聽}
聽printf("\n");
}
void CreateListR(PolyNode * &L,PolyArray a,int n)聽聽聽 //灝炬彃鍏ユ硶寤鴻〃
{
聽PolyNode *s,*r;int i;
聽L=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽 //鍒涘緩澶寸粨鐐?br />聽L->next=NULL;
//聽L->exp=n;
// printf("%d\n",L->exp);
聽r=L;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //r濮嬬粓鎸囧悜緇堢緇撶偣錛屽紑濮嬫椂鎸囧悜澶寸粨鐐?br />聽聽for(i=0;i<n;i++)
聽聽{
聽聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽 //鍒涘緩鏂扮粨鐐?br />聽聽聽 s->coef=a[i].coef;
聽聽聽 s->exp=a[i].exp;
聽聽聽 r->next=s;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //灝?s鎻掑叆*r涔嬪悗
聽聽聽 r=s;
聽聽}
聽聽r->next=NULL;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //灝嗙粓绔粨鐐筺ext鍩熺疆涓篘ULL
}
void Sort(PolyNode * &head)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鎸塭xp鍩熺殑鍊奸掑噺鎺掑簭
{
聽 PolyNode *p=head->next,*q,*r;
聽 if(p!=NULL)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //褰撳師鍗曢摼琛ㄤ笉涓虹┖鏃?br />聽 {
聽聽 r=p->next;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //r淇濆瓨*p緇撶偣鍚庣戶緇撶偣鐨勬寚閽?br />聽聽 p->next=NULL;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鏋勯犲彧鍚竴涓暟鎹粨鐐圭殑鏈夊簭琛?br />聽聽 p=r;
聽聽 while(p!=NULL)
聽聽 {
聽聽聽聽 r=p->next;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //r淇濆瓨*p緇撶偣鍚庣戶緇撶偣鐨勬寚閽?br />聽 q=head;
聽 while(q->next!=NULL && q->next->exp>p->exp)
聽聽 q=q->next;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鍦ㄦ湁搴忚〃涓壘鎻掑叆*p鐨勫墠椹辯粨鐐?q
聽 p->next=q->next;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //灝?p鎻掑叆鍒?q涔嬪悗
聽 q->next=p;
聽 p=r;
聽聽 }
聽 }
}
void Add(PolyNode *ha,PolyNode *hb,PolyNode *&hc)//姹備袱涓湁搴忚〃鐨勫茍
{
聽 PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;
聽 float c;
聽 hc=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //鍒涘緩澶寸粨鐐?br />聽 tc=hc;
聽 while(pa!=NULL && pb!=NULL)
聽 {
聽聽聽 if(pa->exp>pb->exp)
聽{
聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽聽 s->exp=pa->exp;s->coef=pa->coef;
聽聽 tc->next=s;tc=s;
聽聽 pa=pa->next;
聽}
聽else if(pa->exp<pb->exp)
聽{
聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽 s->exp=pb->exp;s->coef=pb->coef;
聽 tc->next=s;tc=s;
聽 pb=pb->next;
聽}
聽else聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //pa->exp=pb->exp鏃?br />聽{
聽c=pa->coef+pb->coef;
聽if(c!=0)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //緋繪暟涔嬪拰涓嶄負0鏃跺垱寤烘柊緇撶偣
聽{
聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽
聽聽 s->exp=pa->exp;s->coef=c;
聽聽 tc->next=s;tc=s;
聽}
聽pa=pa->next;
聽pb=pb->next;
聽}
聽 }
聽 if(pb!=NULL)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //澶嶅埗浣欎笅緇撶偣
聽聽 pa=pb;
聽 while(pa!=NULL)
聽 {
聽聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽s->exp=pa->exp;s->coef=pa->coef;
聽tc->next=s;tc=s;
聽pa=pa->next;
聽 }
聽 tc->next=NULL;
}
void Subs(PolyNode *ha,PolyNode *hb,PolyNode *&hc)聽聽 //姹備袱涓湁搴忚〃鐨勫樊
{
聽 PolyNode *pa=ha->next,*pb=hb->next,*s,*tc;
聽 float c;
聽 hc=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //鍒涘緩澶寸粨鐐?br />聽 tc=hc;
聽 while(pa!=NULL && pb!=NULL)
聽 {
聽聽聽 if(pa->exp>pb->exp)
聽{
聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽聽 s->exp=pa->exp;s->coef=pa->coef;
聽聽 tc->next=s;tc=s;
聽聽 pa=pa->next;
聽}
聽else if(pa->exp<pb->exp)
聽{
聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽 s->exp=pb->exp;s->coef=-pb->coef;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //濡傛灉鍓嶄釜澶氶」寮忎腑鐨勬寚鏁板皬浜庡悗涓欏瑰紡鎸囨暟鍔犱笂璐熷彿
聽 tc->next=s;tc=s;
聽 pb=pb->next;
聽}
聽else聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //pa->exp=pb->exp鏃?br />聽{
聽c=pa->coef-pb->coef;
聽if(c!=0)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //緋繪暟涔嬪樊涓嶄負0鏃跺垱寤烘柊緇撶偣
聽{
聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽
聽聽 s->exp=pa->exp;s->coef=c;
聽聽 tc->next=s;tc=s;
聽}
聽pa=pa->next;
聽pb=pb->next;
聽}
聽 }
聽 if(pb!=NULL)聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //澶嶅埗浣欎笅緇撶偣
聽聽 pa=pb;
聽 while(pa!=NULL)
聽 {
聽聽聽 s=(PolyNode *)malloc(sizeof(PolyNode));聽聽聽聽聽聽聽聽聽聽 //澶嶅埗緇撶偣
聽s->exp=pa->exp;s->coef=pa->coef;
聽tc->next=s;tc=s;
聽pa=pa->next;
聽 }
聽 tc->next=NULL;
}
void main()
{
聽聽 PolyNode *ha,*hb,*hc;
聽聽 //PolyArray a={{1.2,0},{2.5,1},{3.2,3},{-2.5,5}};
聽聽 //PolyArray b={{-1.2,0},{2.5,1},{3.2,3},{2.5,5},{5.4,10}};
聽聽 int m=4,n=5;
聽聽 PolyArray a,b;
聽聽 for(int i=0;i<m;i++)
聽聽 {
聽聽聽聽 printf("璇瘋緭鍏澶氶」寮忎腑絎?d欏圭殑緋繪暟鍜屾寚鏁?,i);
聽 scanf("%f%d",&a[i].coef,&a[i].exp);
聽聽 }
聽
聽聽聽 for(int j=0;j<n;j++)
聽聽 {
聽聽聽聽 printf("璇瘋緭鍏澶氶」寮忎腑絎?d欏圭殑緋繪暟鍜屾寚鏁?,j);
聽 scanf("%f%d",&b[j].coef,&b[j].exp);
聽聽 }
聽聽 CreateListR(ha,a,4);
聽聽 CreateListR(hb,b,5);
聽聽 printf("鍘熸潵A:\n");DispPoly(ha);
聽聽 printf("鍘熸潵B:\n");DispPoly(hb);
聽聽 Sort(ha);
聽聽 Sort(hb);
聽聽 printf("鎺掑簭鍚嶢:\n");DispPoly(ha);
聽聽 printf("鎺掑簭鍚嶣:\n");DispPoly(hb);
聽聽 Add(ha,hb,hc);
聽聽 printf("鐩稿姞鍚?\n");DispPoly(hc);
聽聽 Subs(ha,hb,hc);
聽聽 printf("鐩稿噺鍚?\n");DispPoly(hc);
}
void CreatComplex(Complex& c,float a,float b);
void AddComplex(Complex& sum,Complex c1,Complex c2 );
void Subtract_C(Complex& Sub,Complex c1,Complex c2 );
void Multiple_C(Complex& product,Complex c1,Complex c2 );
void Print_C(Complex c);
void CreatComplex(Complex& c,float a,float b)
{
聽c.real = a;
聽c.image = b;
}
void AddComplex(Complex& sum,Complex c1,Complex c2)
{
聽sum.real = c1.real + c2.real ;
聽sum.image = c1.image聽 + c2.image聽 ;
}
void聽 Subtract_C(Complex& Sub,Complex c1,Complex c2 )
{
聽Sub.real = c1.real -c2.real ;
聽Sub.image = c1.image聽- c2.image ;
}
void Multiple_C(Complex& product,Complex c1,Complex c2 )
{
聽product.real = c1.real * c2.real - c1.image * c2.image ;
聽product.image = c1.real * c2.image + c1.image * c2.real ;
}
void Print_C(Complex c)
{
聽if (c.image == 0.0)
聽聽printf("%5.2f\n",c.real );
聽else
聽聽printf("%5.2f+%5.2fi\n",c.real ,c.image );
聽if(c.real==0.0)
聽聽printf("%5.2fi\n",c.image);
}
complex.cpp浠g爜錛?br />#include "complex.h"
#include <stdio.h>
void main()
{
聽float a,b,c,d;
聽Complex聽聽c1,c2,sum,Sub,Prod;
聽
聽scanf("%f%f%f%f",&a,&b,&c,&d);
聽聽聽
聽CreatComplex(c1,a,b);
聽
聽Print_C(c1);
聽CreatComplex(c2,c,d);
聽Print_C(c2);
聽AddComplex(sum,c1,c2);
聽Print_C(sum);
聽Subtract_C(Sub,c1,c2);
聽Print_C(Sub);
聽Multiple_C(Prod,c1,c2);
聽Print_C(Prod);
}