版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1約瑟夫環(huán)問題/* Joseph cycle*/#in elude <stdio.h>#in elude <coni o.h> #in elude <alloc.h> typedef int ElemType;typedef struct LNodeElemType data;struct LNode *n ext; LNode,*POINTER,*L in kList;void in it_li nklist(Li nkList *l);void release_li nklist(Li nkList *l);void clear_li nklist(L
2、in kList l);void crt_li nklist(L in kList *l);void disp_li nklist(Li nkList l);void game(L in kList l);void exitgame(void);void in it_li nklist(L in kList *1)/*對(duì)循環(huán)單鏈表進(jìn)行初始化*/(*l)=(POINTER)malloc(sizeof(struct LNode);(*l)->data=-1;(*l)-> next=(*l);void clear_li nklist(Li nkList l)/*對(duì)循環(huán)單鏈表清空 */PO
3、INTER p,useless;p=l->n ext;l->n ext=l;while(p!=l)useless=p;p=p->n ext;free(useless);void crt_li nklist(L in kList *l)/*輸入數(shù)據(jù)創(chuàng)建約瑟夫環(huán)表*/int num;POINTER p;clear_li nklist(*l);prin tf("nnln put some int nu mbers (ending with -1) :n ”);scan f("%d",&n um);while( nu m!=-1)p=(POINT
4、ER)malloc(sizeof(struct LNode);p->data=num;p_>n ext=(*l)->n ext;(*l)->n ext=p;scan f("%d",&n um);void disp_linklist(LinkList I)/*顯示表中元素內(nèi)容 */ in t i=1,row=1;POINTER p=l-> next;prin tf("nn");while(p!=l)if(row=7)row=1;prin tf("n");prin tf("%5d:%-5d|
5、",i,p->data);i+;row+;p=p->n ext;void game(LinkList l)/* 元素依次根據(jù)密碼值出圈*/int m,k=0;POINTER p=l,pre,u;printf("nnCount Number m=?");scan f("%d",&m);prin tf("nnnn%40snn","GAME START");while(p->n ext!=p)pre=p;p=p->n ext;if(p=l) pre=p; p=p->n ex
6、t;+k;if(k=m) printf(" %d",p->data);pre_>n ext=p->n ext;u=p;free(u);p=pre;k=0;printf("nn%40s","GAME OVER");void exitgame()prin tf("nn%40s","GOOD_BYE_GOOD !");void releasenklist(Li nkList *1)/*銷毀循環(huán)單鏈表(約瑟夫環(huán))*/clear_li nklist(*l);free(*l);void m
7、ain()/* 主控函數(shù) */int select;Lin kList list;in it_li nklist(& list);doprin tf("%s%15s%15s%15s%15s","nnnnnn","1:Create","2:Display","3:Game","4:Exit");prin tf("nn%33c",'');select=getche();switch(select)case '1': cr
8、t_li nklist(&list);disp_li nklist(list);break;case '2': disp_li nklist(list);break;case '3': game(list);break;case '4': exitgame();break;default: prin tf("nWrong select ! Try aga in. ”);/*switch*/while(select!='4'); releasenklist( & list); getch(); 2.停車場管
9、理/*停車場管理系統(tǒng)*/#in clude<stdio.h>#in clude<stdlib.h>#in clude<stri ng.h>/* */#define MAX 2 /* 車庫容量 */#define price 0.05 /*每車每分鐘費(fèi)用 */typedef struct timeint hour;int min;Time; /*時(shí)間結(jié)點(diǎn)*/typedef struct no dechar num10;Time reach;Time leave;CarNode; /*車輛信息結(jié)點(diǎn)*/typedef struct NODECarNode *sta
10、ckMAX+1;int top;SeqStackCar; /* 模擬車站 */typedef struct carCarNode *data;struct car *n ext;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /* 模擬通道 */* */void InitStack(SeqStackCar *); /* 初始化棧 */int InitQueue(LinkQueueCar *); /* 初始化便道 */int Arrival(SeqStackCar *,LinkQueueCar
11、*); /* 車輛到達(dá) */void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /* 車輛離開 */ void List(SeqStackCar,LinkQueueCar); /* 顯示存車信息 */* */void mai n()SeqStackCar En ter,Temp;Lin kQueueCar Wait;int ch;InitStack(&Enter); /* 初始化車站 */InitStack(&Temp); /*初始化讓路的臨時(shí)棧 */InitQueue(&Wait); /* 初始化通道 */w
12、hile(1)printf("n1.車輛到達(dá)");printf(” 2.車輛離開");printf(" 3.列表顯示");printf(” 4.退出系統(tǒng) n");while(1)scan f("%d",&ch);if(ch>=1 &&ch<=4)break;else printf("n 請(qǐng)選擇:1|2|3|4.");switch(ch)case 1:Arrival(&Enter,&Wait);break; /* 車輛到達(dá) */case 2:Le
13、ave(&Enter,&Temp,&Wait);break; /* 車輛離開 */case 3:List(Enter,Wait);break; /* 列表打印信息 */case 4:exit(0); /* 退出主程序 */default: break;/* */ void InitStack(SeqStackCar *s) /* 初始化棧 */int i;s->top=0;for(i=0;i<=MAX;i+)s->stacks->top=NULL;int InitQueue(LinkQueueCar *Q) /* 初始化便道 */Q->he
14、ad=(QueueNode *)malloc(sizeof(QueueNode); if(Q->head!=NULL)Q->head-> next=NULL;Q->rear=Q->head;return(1);else return(-1);void PRINT(CarNode *p,i nt room) /* 打印出站車的信息 */int A1,A2,B1,B2;printf("n請(qǐng)輸入離開的時(shí)間:/*:*/");scan f("%d:%d",& (p->leave.hour),&(p->lea
15、ve.mi n);printf("n離開車輛的車牌號(hào)為:”);puts(p->nu m);printf("n 其到達(dá)時(shí)間為:%d:%d",p->reach.hour,p->reach.min); printf("離開時(shí)間為:%d:%d",p->leave.hour,p->leave.min); A1=p->reach.hour;A2=p->reach. min;B1=p->leave.hour;B2=p->leave .min;printf("n 應(yīng)交費(fèi)用為:%2.1f 元&quo
16、t;,(B1-A1)*60+(B2-A2)*price); free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá) */CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode); flushall();printf("n請(qǐng)輸入車牌號(hào)(例:陜A1234):");gets(p->nu m);if(E nter->top<MAX)/* 車場未滿,車進(jìn)車場 */En ter->top+;printf("n 車輛在車場第
17、 %d 位置.",Enter->top); printf("n請(qǐng)輸入到達(dá)時(shí)間:/*:*/");scan f("%d:%d", &(p->reach.hour),&(p->reach.mi n);En ter->stackE nter->top=p;return(1);else /*車場已滿,車進(jìn)便道*/printf("n該車須在便道等待r);t=(QueueNode *)malloc(sizeof(QueueNode); t->data=p;t-> next=NULL;W-&g
18、t;rear- >n ext=t; W->rear=t;return(1);void Leave(SeqStackCar *En ter,SeqStackCar *Temp,Li nkQueueCar *W) /*車輛離開*/int i, room;CarNode *p,*t;QueueNode *q;/*判斷車場內(nèi)是否有車*/if(Enter->top>0) /* 有車 */while(1) /*輸入離開車輛的信息*/printf("n 請(qǐng)輸入車在車場的位置 /1-%d/: ",Enter->top);scan f("%d"
19、;,&room);if(room>=1 &&roo m<=E nter->top) break;while(Enter->top>room) /* 車輛離開 */Temp_>top+;Temp->stackTemp->top=E nter->stackE nter->top;En ter->stackE nter->top=NULL;En ter->top-;p=E nter->stackE nter->top;En ter->stackE nter->top=NULL
20、;En ter->top-;while(Temp->top>=1)En ter->top+;En ter->stackE nter->top=Temp->stackTemp->top;Temp->stackTemp->top=NULL;Temp_>top_;PRINT(p,room);/*判斷通道上是否有車及車站是否已滿*/if(W->head!=W->rear)&&En ter->top<MAX) /*便道的車輛進(jìn)入車場*/q=W->head->n ext;t=q->d
21、ata;En ter->top+;printf("n便道的s號(hào)車進(jìn)入車場第 d位置.",t->num,Enter->top); printf("n請(qǐng)輸入現(xiàn)在的時(shí)間/*:*/:");scan f("%d:%d", &( t->reach.hour),&(t->reach.mi n);W->head->n ext=q->n ext;if(q=W->rear) W->rear=W->head;En ter->stackE nter->top=t;f
22、ree(q);else printf("n 便道里沒有車.n");else printf("n車場里沒有車.");/*沒車*/void List1(SeqStackCar *S) /* 列表顯示車場信息 */int i;if(S->top>0) /*判斷車站內(nèi)是否有車 */printf("n 車場:");printf("n 位置 到達(dá)時(shí)間 車牌號(hào)n");for(i=1;i<=S_>top;i+)prin tf(" %d ",i);prin tf("%d:%d &
23、quot;,S->stacki->reach.hour,S->stacki->reach.mi n); puts(S->stacki->nu m);else printf("n車場里沒有車”);void List2(Li nkQueueCar *W) /* 列表顯示便道信息 */QueueNode *p;p=W->head->n ext;if(W->head!=W->rear) /*判斷通道上是否有車 */printf("n等待車輛的號(hào)碼為:");while(p!=NULL)puts(p->data
24、->nu m);p=p->n ext;else printf("n便道里沒有車.");void List(SeqStackCar S,L in kQueueCar W)int flag,tag;flag=1;while(flag)printf("n 請(qǐng)選擇 1|2|3:");printf("n1.車場n2.便道 n3.返回 n”);while(1)scan f("%d", &tag);if(tag>=1|tag<=3) break;else printf("n 請(qǐng)選擇 1|2|3:&
25、quot;);switch(tag)case 1:List1(&S);break; /* 列表顯示車場信息 */ case 2:List2(&W);break; /* 列表顯示便道信息 */ case 3:flag=0;break;default: break;3.二叉樹的建立與遍歷/*PROGRAM :二叉樹 *CONTENT :建立,前序、中序、后序遍歷/* * #in clude <dos.h>#in clude <coni o.h>#in clude <stdio.h>#in clude <stdlib.h>en um B
26、OOLFalse,True;typedef struct BiTNode /定義二叉樹節(jié)點(diǎn)結(jié)構(gòu) char data; / 數(shù)據(jù)域struct BiTNode *lchild,*rchild; / 左右孩子指針域 BiTNode,*BiTree;void CreateBiTree(BiTree &); / 生成一個(gè)二叉樹 void PreOrder(BiTree); /先序遞歸遍歷二叉樹 void InOrder(BiTree); /中序遞歸遍歷二叉樹 void PostOrder(BiTree); / 后序遞歸遍歷二叉樹 void mai n()BiTree T;char ch,j;i
27、nt flag=1;BOOL temp;textbackground(3); / 設(shè)定屏幕顏色 textcolor(15);clrscr();/程序解說printf("本程序?qū)崿F(xiàn)二叉樹的操作。n");printf(”可以進(jìn)行建立二叉樹,遞歸先序、中序、后序遍歷等操作。n");/printf("請(qǐng)將先序遍歷二叉樹的結(jié)果輸入以建立二叉樹。n");printf("對(duì)于葉子結(jié)點(diǎn)以空格表示。n");printf(”例如:abc de g f (回車),建立如下二叉樹:n");printf(” a n");print
28、f(” / n");prin tf(" b n");prin tf(" / n");prin tf(" c d n");prin tf(" / n");prin tf(" e f n");prin tf(" n");printf(” g n");CreateBiTree(&T); / 初始化樹 getchar();while(flag) printf("請(qǐng)選擇:n”);printf("1.遞歸先序遍歷n");print
29、f("2.遞歸中序遍歷n");printf("3.遞歸后序遍歷n");printf("4.退出程序 n");scanf(” %c",&j);switch(j)case '1':if(T)printf("先序遍歷二叉樹:");PreOrder(T);prin tf("n");else printf("二叉樹為空!n");break;case 2:if(T)printf("中序遍歷二叉樹:");In Order(T);prin
30、 tf("n");else printf("二叉樹為空!n");break;case 3:if(T)printf("后序遍歷二叉樹:");PostOrder(T);prin tf("n");else printf("二叉樹為空!n");break;default:flag=O;printf("程序運(yùn)行結(jié)束,按任意鍵退出!n");getch();void CreateBiTree(BiTree &T)char ch;scanf("%c",&c
31、h); / 讀入一個(gè)字符if(ch=' ') T=NULL;else (*T)=(BiTNode *)malloc(sizeof(BiTNode); /生成一個(gè)新結(jié)點(diǎn)T->data=ch;CreateBiTree(&(*T)->lchild); / 生成左子樹CreateBiTree(&(*T)->rchild); / 生成右子樹void PreOrder(BiTree T)if(T)printf("%c",T->data); / 訪問結(jié)點(diǎn)PreOrder(T->lchild); / 遍歷左子樹PreOrder(
32、T->rchild); / 遍歷右子樹void In Order(BiTree T)if(T)InOrder(T->lchild); / 遍歷左子樹printf("%c",T->data); / 訪問結(jié)點(diǎn)InOrder(T->rchild); / 遍歷右子樹void PostOrder(BiTree T)if(T)PostOrder(T->lchild); / 遍歷左子樹 PostOrder(T->rchild); / 訪問結(jié)點(diǎn) printf("%c",T->data); / 遍歷右子樹 4圖遍歷* * * *
33、* * * * * * * * * * * * * * * * * * * *PROGRAM :圖的遍歷 *CONTENT :生成,深度、廣度優(yōu)先遍歷* * * * * * * * * * * * * * * * * * * * * * * * #in elude <dos.h> #in elude <coni o.h> #in clude <stdio.h>#in clude <stdlib.h> #in clude <stri ng.h>#defi ne MAX_VERTEX_NUM 20 /圖的最大頂點(diǎn)數(shù)#define MAXQ
34、SIZE 30 /隊(duì)列的最大容量enum BOOL False,True;typedef struct ArcNodeint adjvex; /該弧所指向的頂點(diǎn)的位置struct ArcNode *nextarc; / 指向下一條弧的指針ArcNode; / 弧結(jié)點(diǎn)typedef structArcNode* AdjListMAX_VERTEX_NUM; /指向第一條依附該頂點(diǎn)的弧的指針int vexnum,arcnum; /圖的當(dāng)前頂點(diǎn)和弧數(shù)int GraphKind; /圖的種類,0-無向圖,1-有向圖Graph;typedef struct / 隊(duì)列結(jié)構(gòu)i nt elemMAXQSIZE
35、; / 數(shù)據(jù)域int front; /隊(duì)頭指針int rear; /隊(duì)尾指針SqQueue;BOOL visitedMAX_VERTEX_NUM; /全局變量訪問標(biāo)志數(shù)組void CreateGraph(Graph &); / 生成圖的鄰接表void DFSTraverse(Graph); /深度優(yōu)先搜索遍歷圖void DFS(Graph,i nt);void BFSTraverse(Graph); /廣度優(yōu)先搜索遍歷圖void Initial(SqQueue &); / 初始化一個(gè)隊(duì)列BOOL QueueEmpty(SqQueue); / 判斷隊(duì)列是否空BOOL EnQueu
36、e(SqQueue &,int); / 將一個(gè)元素入隊(duì)列BOOL DeQueue(SqQueue &int &); / 將一個(gè)元素出隊(duì)列int FirstAdjVex(Graph,int); /求圖中某一頂點(diǎn)的第一個(gè)鄰接頂點(diǎn)int NextAdjVex(Graph,int,int); /求某一頂點(diǎn)的下一個(gè)鄰接頂點(diǎn) void mai n()Graph G; /采用鄰接表結(jié)構(gòu)的圖char j='y'textbackground(3); / 設(shè)定屏幕顏色textcolor(15);clrscr();II程序解說printf("本程序?qū)⒀菔旧梢粋€(gè)圖,
37、并對(duì)它進(jìn)行遍歷.n");printf("首先輸入要生成的圖的種類.n");printf("0-無向圖,1-有向圖 n");printf("之后輸入圖的頂點(diǎn)數(shù)和弧數(shù)。n格式:頂點(diǎn)數(shù),弧數(shù);例如 :4,3n");printf("接著輸入各邊(弧尾,弧頭).n例如:n1,2n1,3n2,4n");printf("程序會(huì)生成一個(gè)圖,并對(duì)它進(jìn)行深度和廣度遍歷.n");printf("深度遍歷:1->2->4->3n 廣度遍歷:1->2->3->4n&
38、quot;);IIwhile(j!='N'&&j!=' n')pri ntf("請(qǐng)輸入要生成的圖的種類(0/1):");scanf("%d",&G .GraphKind); II 輸入圖的種類printf("請(qǐng)輸入頂點(diǎn)數(shù)和弧數(shù):”);scanf("%d,%d",&G.vexnum,&G .arcnum); II輸入圖的頂點(diǎn)數(shù)和弧數(shù)CreateGraph(G); II生成鄰接表結(jié)構(gòu)的圖DFSTraverse(G); II深度優(yōu)先搜索遍歷圖BFSTraver
39、se(G); II廣度優(yōu)先搜索遍歷圖printf(”圖遍歷完畢,繼續(xù)進(jìn)行嗎?(Y/N)");scanf(” %c",&j);void CreateGraph(Graph &G)II構(gòu)造鄰接表結(jié)構(gòu)的圖Gint i;int start,e nd;ArcNode *s;for(i=1;i<=G .vexnum;i+) G .AdjListi=NULL; II初始化指針數(shù)組for(i=1;i<=G .arcnum;i+)scanf("%d,%d",&start,&end); II 輸入弧的起點(diǎn)和終點(diǎn)s=(ArcNode
40、 *)malloc(sizeof(ArcNode); II 生成一個(gè)弧結(jié)點(diǎn)s->nextarc=G.AdjListstart; II 插入到鄰接表中 s->adjvex=e nd;G.AdjListstart=s;if(G.GraphKind=0) /若是無向圖,再插入到終點(diǎn)的弧鏈中s=(ArcNode *)malloc(sizeof(ArcNode);s->n extarc=G.AdjListe nd;s->adjvex=start;G.AdjListe nd=s;void DFSTraverse(Graph G)/深度優(yōu)先遍歷圖Gint i;prin tf(&quo
41、t;DFSTraverse:");for(i=1;i<=G .vexnum;i+) visitedi=False; / 訪問標(biāo)志數(shù)組初始化for(i=1;i<=G .vexnum;i+)if(!visitedi) DFS(G ,i); /對(duì)尚未訪問的頂點(diǎn)調(diào)用DFSprin tf("bb n");void DFS(Graph G ,int i)/從第i個(gè)頂點(diǎn)出發(fā)遞歸地深度遍歷圖Gint w;visitedi=True; / 訪問第 i 個(gè)頂點(diǎn)prin tf("%d->",i);for(w=FirstAdjVex(G,i);w;w
42、=NextAdjVex(G ,i,w) if(!visitedw) DFS(G ,w); /對(duì)尚未訪問的鄰接頂點(diǎn)w調(diào)用DFSvoid BFSTraverse(Graph G)/按廣度優(yōu)先非遞歸的遍歷圖G,使用輔助隊(duì)列 Q和訪問標(biāo)志數(shù)組 visitedint i,u,w;SqQueue Q;prin tf("BFSTreverse:");for(i=1;i<= G .vexnum;i+) visitedi=False; / 訪問標(biāo)志數(shù)組初始化Initial(Q); /初始化隊(duì)列for(i=1;i<=G .vexnum;i+)if(!visitedi)visited
43、i=True; / 訪問頂點(diǎn) iprin tf("%d->",i);EnQueue(Q,i); /將序號(hào)i入隊(duì)列while(!QueueEmpty(Q)/ 若隊(duì)列不空,繼續(xù)DeQueue(Q,u); /將隊(duì)頭元素出隊(duì)列并置為ufor(w=FirstAdjVex(G,u);w;w=NextAdjVex(G ,u,w) if(!visitedw) /對(duì)u的尚未訪問的鄰接頂點(diǎn)w進(jìn)行訪問并入隊(duì)列visitedw=True;prin tf("%d->",w);En Queue(Q,w);prin tf("bb n");int Fir
44、stAdjVex(Graph G,int v)/在圖G中尋找第v個(gè)頂點(diǎn)的第一個(gè)鄰接頂點(diǎn)if(!G .AdjListv) return 0;else return(G.AdjListv->adjvex);int NextAdjVex(Graph G,int v,int u)/在圖G中尋找第v個(gè)頂點(diǎn)的相對(duì)于u的下一個(gè)鄰接頂點(diǎn)ArcNode *p;p=G.AdjListv;while(p->adjvex!=u) p=p->nextarc; / 在頂點(diǎn) v 的弧鏈中找到頂點(diǎn) u if(p-> nextarc=NULL) return 0; / 若已是最后一個(gè)頂點(diǎn),返回0else
45、 return(p->nextarc->adjvex); / 返回下一個(gè)鄰接頂點(diǎn)的序號(hào) void Initial(SqQueue &Q)/隊(duì)列初始化Q.fr on t=Q.rear=0;BOOL QueueEmpty(SqQueue Q)/判斷隊(duì)列是否已空,若空返回True,否則返回Falseif(Q.fr on t=Q.rear) return True;else retur n False;BOOL En Queue(SqQueue & Q,i nt ch)/入隊(duì)列,成功返回True,失敗返回Falseif(Q.rear+1)%MAXQSIZE=Q.fro nt
46、) return False;Q.elemQ.rear=ch;Q.rear=(Q.rear+1)%MAXQSIZE;return True;BOOL DeQueue(SqQueue & Q,i nt & ch)/出隊(duì)列,成功返回True,并用ch返回該元素值,失敗返回Falseif(Q.fr on t=Q.rear) return False;ch=Q.elemQ.fro nt;Q.fro nt=(Q.fro nt+1)%MAXQSIZE;return True; /成功出隊(duì)列,返回True5哈希表設(shè)計(jì)/*PROGRAM :哈希表的綜合操作 *CONTENT :l nsert,
47、Search,Deltet */*#in clude <dos.h> #in clude <coni o.h>#in clude <math.h>#in clude <stdio.h> #in clude <stdlib.h>#define MAXSIZE 12 /哈希表的最大容量,與所采用的哈希函數(shù)有關(guān)en um BOOLFalse,True;enum HAVEORNOTNULLKEY,HA VEKEY ,DELKEY;哈希表元素的三種狀態(tài),沒有記錄、有記錄、有過記錄但已被刪除typedef struct /定義哈希表的結(jié)構(gòu)i nt
48、 elemMAXSIZE; / 數(shù)據(jù)元素體HAVEORNOT elemflagMAXSIZE; II元素狀態(tài)標(biāo)志,沒有記錄、有記錄、有過記錄但已被刪除int count; II哈希表中當(dāng)前元素的個(gè)數(shù)HashTable;typedef structint key num; II記錄的數(shù)據(jù)域,只有關(guān)鍵字一項(xiàng)Record;void InitialHash(HashTable&); / 初始化哈希表void PrintHash(HashTable); II顯示哈希表中的所有元素BOOL SearchHash(HashTable,int,int&); / 在哈希表中查找元素BOOL In
49、sertHash(HashTable&,Record); II 在哈希表中插入元素BOOL DeleteHash(HashTable&,Record); II 在哈希表中刪除元素int Hash(int); II 哈希函數(shù)void mai n()HashTable H; II聲明哈希表 Hchar ch,j='y'int positi on;Record R;BOOL temp;textbackground(3); II 設(shè)定屏幕顏色textcolor(15);clrscr();II程序說明prin tf("This program will show
50、 how to operate to a HashTable.n");prin tf("You can display all elems,search a elem,nin sert a elem,delete a elem.n");IIIni tialHash(H);while(j!=' n')pri ntf("1.displayn ”);prin tf("2.searchn ”);prin tf("3.i nsertn");prin tf("4.deleten ”);prin tf("
51、;5.exit n");scanf(” %c",&ch); /輸入操作選項(xiàng)switch(ch)case '1':if(H.count) PrintHash(H); / 哈希表不空else prin tf("The HashTable has no elem!n");break;case '2':if(!H.cou nt) pri ntf("The HashTable has no elem!n"); / 哈希表空 else pri ntf("Please in put the keyn
52、u m(i nt) of the elem to search:"); scanf("%d",&R.keynum); /輸入待查記錄的關(guān)鍵字 temp=SearchHash(H,R.ke ynu m,positi on);temp=True:記錄查找成功;temp=False:沒有找到待查記錄 if(temp) printf("The position of the elem is %dn",position); else prin tf("The elem isn't exist!n");break;cas
53、e 3:if(H.cou nt=MAXSIZE) / 哈希表已滿prin tf("The HashTable is full!n"); break;prin tf("Please in put the elem(i nt) to in sert:");scanf("%d",&R.keynum); /輸入要插入的記錄 temp=In sertHash(H,R);/temp=True:記錄插入成功;temp=False:已存在關(guān)鍵字相同的記錄 if(temp) prin tf("Sucess to in sert the
54、 elem!n");else printf("Fail to insert the elem.The same elem has been exist!n"); break;case '4':pri ntf("Please in put the keynum of the elem(i nt) to delet:"); scanf("%d",&R.keynum); /輸入要?jiǎng)h除記錄的關(guān)鍵字 temp=DeleteHash(H,R);/temp=True:記錄刪除成功;temp=False:待刪記錄不存
55、在 if(temp) prin tf("Sucess to delete the elem!n");else prin tf("The elem isn't exist in the HashTable!n"); break;default: j=' n'printf("The program is over!nPress any key to shut off the window!n");getchar();getchar();void InitialHash(HashTable &H)/哈希表初始
56、化int i;H.co un t=0;for(i=0;i<MAXSIZE;i+) H.elemflagi=NULLKEY;void Prin tHash(HashTable H)/顯示哈希表所有元素及其所在位置int i;for(i=0;i<MAXSIZE;i+) /顯示哈希表中記錄所在位置if(H.elemflagi=HA VEKEY) /只顯示標(biāo)志為 HAVEKEY(存放有記錄)的元素 prin tf(%4d",i);prin tf("n");for(i=0;i<MAXSIZE;i+) /顯示哈希表中記錄值if(H.elemflagi=HA
57、VEKEY)prin tf("%-4d",H.elemi);prin tf("nco un t:%dn" ,H.cou nt); / 顯示哈希表當(dāng)前記錄數(shù)BOOL SearchHash(HashTable H,i nt k,i nt &p)/在開放定址哈希表 H中查找關(guān)鍵字為k的數(shù)據(jù)元素,若查找成功,以p指示待查數(shù)據(jù)元素在表中的位置,并返回True;否則,以p指示插入位置,并返回Falseint p1;p1=p=Hash(k); /求得哈希地址while(H.elemflagp=HA VEKEY&&k!=H.elemp)該位置中填
58、有記錄并且關(guān)鍵字不相等p+; /沖突處理方法:線性探測(cè)再散列if(p>=MAXSIZE) p=p%MAXSIZE; /循環(huán)搜索if(p=p1) return False; /整個(gè)表已搜索完,沒有找到待查元素if(k=H.elemp&&H.elemflagp=HAVEKEY) / 查找成功,p 指示待查元素位置return True;else return False; 查找不成功BOOL In sertHash(HashTable & H,Record e)/查找不成功時(shí)插入元素e到開放定址哈希表H中,并返回True,否則返回Falsein t p;if(Sear
59、chHash(H,e.keynum,p)/表中已有與 e有相同關(guān)鍵字的元素retur n False;elseH.elemflagp=HA VEKEY; /設(shè)置標(biāo)志為 HAVEKEY,表示該位置已有記錄H.elemp=e.ke ynum; /插入記錄H.count+; /哈希表當(dāng)前長度加一return True;BOOL DeleteHash(HashTable & H,Record e)/在查找成功時(shí)刪除待刪元素e,并返回True,否則返回Falsein t p;if(!SearchHash(H,e.keynum,p) / 表中不存在待刪元素retur n False;elseH.elemflagp=DELKEY; /設(shè)置標(biāo)志為DELKEY,表明該元素已被刪除H.count-; /哈希表當(dāng)前長度減一return True;int Hash( in t k n)/ 哈希函數(shù):H(key)=key MOD 11return (k n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024簡單家具維修合同范本
- 2024年加工承攬合同標(biāo)的與質(zhì)量標(biāo)準(zhǔn)
- 2024建筑材料采購合同范本下載
- 2024年度公園綠化樹苗采購合同
- 2024年山東濰坊物業(yè)委托管理合同
- 迷霧解說課件教學(xué)課件
- 2024年度互聯(lián)網(wǎng)金融產(chǎn)品研發(fā)與推廣合同
- 04版智能家居系統(tǒng)研發(fā)與銷售合同
- 2024年度云服務(wù)提供商合同
- 2024年店鋪投資合作協(xié)議
- 護(hù)理質(zhì)量安全與風(fēng)險(xiǎn)管理的案例分析
- 工程流體力學(xué)課后習(xí)題答案-(杜廣生)
- AI智能客服應(yīng)用實(shí)踐
- 《止吐藥臨床應(yīng)用》課件
- 幕墻工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- 危險(xiǎn)化學(xué)品經(jīng)營企業(yè)安全生產(chǎn)獎(jiǎng)懲制度范本
- 報(bào)價(jià)單模板完
- 30題藥品質(zhì)量檢測(cè)崗位常見面試問題含HR問題考察點(diǎn)及參考回答
- 《嬰幼兒行為觀察、記錄與評(píng)價(jià)》期末試卷及答案 卷3
- 企業(yè)戰(zhàn)略管理概述
- 消防安全概述
評(píng)論
0/150
提交評(píng)論