


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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)/*對循環(huán)單鏈表進行初始化*/(*l)=(POINTER)malloc(sizeof(struct LNode);(*l)->data=-1;(*l)-> next=(*l);void clear_li nklist(Li nkList l)/*對循環(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 /*每車每分鐘費用 */typedef struct timeint hour;int min;Time; /*時間結(jié)點*/typedef struct no dechar num10;Time reach;Time leave;CarNode; /*車輛信息結(jié)點*/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、*); /* 車輛到達 */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); /*初始化讓路的臨時棧 */InitQueue(&Wait); /* 初始化通道 */w
12、hile(1)printf("n1.車輛到達");printf(” 2.車輛離開");printf(" 3.列表顯示");printf(” 4.退出系統(tǒng) n");while(1)scan f("%d",&ch);if(ch>=1 &&ch<=4)break;else printf("n 請選擇:1|2|3|4.");switch(ch)case 1:Arrival(&Enter,&Wait);break; /* 車輛到達 */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請輸入離開的時間:/*:*/");scan f("%d:%d",& (p->leave.hour),&(p->lea
15、ve.mi n);printf("n離開車輛的車牌號為:”);puts(p->nu m);printf("n 其到達時間為:%d:%d",p->reach.hour,p->reach.min); printf("離開時間為:%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)交費用為:%2.1f 元&quo
16、t;,(B1-A1)*60+(B2-A2)*price); free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達 */CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode); flushall();printf("n請輸入車牌號(例:陜A1234):");gets(p->nu m);if(E nter->top<MAX)/* 車場未滿,車進車場 */En ter->top+;printf("n 車輛在車場第
17、 %d 位置.",Enter->top); printf("n請輸入到達時間:/*:*/");scan f("%d:%d", &(p->reach.hour),&(p->reach.mi n);En ter->stackE nter->top=p;return(1);else /*車場已滿,車進便道*/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 請輸入車在車場的位置 /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) /*便道的車輛進入車場*/q=W->head->n ext;t=q->d
21、ata;En ter->top+;printf("n便道的s號車進入車場第 d位置.",t->num,Enter->top); printf("n請輸入現(xiàn)在的時間/*:*/:");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 位置 到達時間 車牌號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等待車輛的號碼為:");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 請選擇 1|2|3:");printf("n1.車場n2.便道 n3.返回 n”);while(1)scan f("%d", &tag);if(tag>=1|tag<=3) break;else printf("n 請選擇 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é)點結(jié)構(gòu) char data; / 數(shù)據(jù)域struct BiTNode *lchild,*rchild; / 左右孩子指針域 BiTNode,*BiTree;void CreateBiTree(BiTree &); / 生成一個二叉樹 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(”可以進行建立二叉樹,遞歸先序、中序、后序遍歷等操作。n");/printf("請將先序遍歷二叉樹的結(jié)果輸入以建立二叉樹。n");printf("對于葉子結(jié)點以空格表示。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("請選擇: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("程序運行結(jié)束,按任意鍵退出!n");getch();void CreateBiTree(BiTree &T)char ch;scanf("%c",&c
31、h); / 讀入一個字符if(ch=' ') T=NULL;else (*T)=(BiTNode *)malloc(sizeof(BiTNode); /生成一個新結(jié)點T->data=ch;CreateBiTree(&(*T)->lchild); / 生成左子樹CreateBiTree(&(*T)->rchild); / 生成右子樹void PreOrder(BiTree T)if(T)printf("%c",T->data); / 訪問結(jié)點PreOrder(T->lchild); / 遍歷左子樹PreOrder(
32、T->rchild); / 遍歷右子樹void In Order(BiTree T)if(T)InOrder(T->lchild); / 遍歷左子樹printf("%c",T->data); / 訪問結(jié)點InOrder(T->rchild); / 遍歷右子樹void PostOrder(BiTree T)if(T)PostOrder(T->lchild); / 遍歷左子樹 PostOrder(T->rchild); / 訪問結(jié)點 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 /圖的最大頂點數(shù)#define MAXQ
34、SIZE 30 /隊列的最大容量enum BOOL False,True;typedef struct ArcNodeint adjvex; /該弧所指向的頂點的位置struct ArcNode *nextarc; / 指向下一條弧的指針ArcNode; / 弧結(jié)點typedef structArcNode* AdjListMAX_VERTEX_NUM; /指向第一條依附該頂點的弧的指針int vexnum,arcnum; /圖的當前頂點和弧數(shù)int GraphKind; /圖的種類,0-無向圖,1-有向圖Graph;typedef struct / 隊列結(jié)構(gòu)i nt elemMAXQSIZE
35、; / 數(shù)據(jù)域int front; /隊頭指針int rear; /隊尾指針SqQueue;BOOL visitedMAX_VERTEX_NUM; /全局變量訪問標志數(shù)組void CreateGraph(Graph &); / 生成圖的鄰接表void DFSTraverse(Graph); /深度優(yōu)先搜索遍歷圖void DFS(Graph,i nt);void BFSTraverse(Graph); /廣度優(yōu)先搜索遍歷圖void Initial(SqQueue &); / 初始化一個隊列BOOL QueueEmpty(SqQueue); / 判斷隊列是否空BOOL EnQueu
36、e(SqQueue &,int); / 將一個元素入隊列BOOL DeQueue(SqQueue &int &); / 將一個元素出隊列int FirstAdjVex(Graph,int); /求圖中某一頂點的第一個鄰接頂點int NextAdjVex(Graph,int,int); /求某一頂點的下一個鄰接頂點 void mai n()Graph G; /采用鄰接表結(jié)構(gòu)的圖char j='y'textbackground(3); / 設(shè)定屏幕顏色textcolor(15);clrscr();II程序解說printf("本程序?qū)⒀菔旧梢粋€圖,
37、并對它進行遍歷.n");printf("首先輸入要生成的圖的種類.n");printf("0-無向圖,1-有向圖 n");printf("之后輸入圖的頂點數(shù)和弧數(shù)。n格式:頂點數(shù),弧數(shù);例如 :4,3n");printf("接著輸入各邊(弧尾,弧頭).n例如:n1,2n1,3n2,4n");printf("程序會生成一個圖,并對它進行深度和廣度遍歷.n");printf("深度遍歷:1->2->4->3n 廣度遍歷:1->2->3->4n&
38、quot;);IIwhile(j!='N'&&j!=' n')pri ntf("請輸入要生成的圖的種類(0/1):");scanf("%d",&G .GraphKind); II 輸入圖的種類printf("請輸入頂點數(shù)和弧數(shù):”);scanf("%d,%d",&G.vexnum,&G .arcnum); II輸入圖的頂點數(shù)和弧數(shù)CreateGraph(G); II生成鄰接表結(jié)構(gòu)的圖DFSTraverse(G); II深度優(yōu)先搜索遍歷圖BFSTraver
39、se(G); II廣度優(yōu)先搜索遍歷圖printf(”圖遍歷完畢,繼續(xù)進行嗎?(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 輸入弧的起點和終點s=(ArcNode
40、 *)malloc(sizeof(ArcNode); II 生成一個弧結(jié)點s->nextarc=G.AdjListstart; II 插入到鄰接表中 s->adjvex=e nd;G.AdjListstart=s;if(G.GraphKind=0) /若是無向圖,再插入到終點的弧鏈中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; / 訪問標志數(shù)組初始化for(i=1;i<=G .vexnum;i+)if(!visitedi) DFS(G ,i); /對尚未訪問的頂點調(diào)用DFSprin tf("bb n");void DFS(Graph G ,int i)/從第i個頂點出發(fā)遞歸地深度遍歷圖Gint w;visitedi=True; / 訪問第 i 個頂點prin tf("%d->",i);for(w=FirstAdjVex(G,i);w;w
42、=NextAdjVex(G ,i,w) if(!visitedw) DFS(G ,w); /對尚未訪問的鄰接頂點w調(diào)用DFSvoid BFSTraverse(Graph G)/按廣度優(yōu)先非遞歸的遍歷圖G,使用輔助隊列 Q和訪問標志數(shù)組 visitedint i,u,w;SqQueue Q;prin tf("BFSTreverse:");for(i=1;i<= G .vexnum;i+) visitedi=False; / 訪問標志數(shù)組初始化Initial(Q); /初始化隊列for(i=1;i<=G .vexnum;i+)if(!visitedi)visited
43、i=True; / 訪問頂點 iprin tf("%d->",i);EnQueue(Q,i); /將序號i入隊列while(!QueueEmpty(Q)/ 若隊列不空,繼續(xù)DeQueue(Q,u); /將隊頭元素出隊列并置為ufor(w=FirstAdjVex(G,u);w;w=NextAdjVex(G ,u,w) if(!visitedw) /對u的尚未訪問的鄰接頂點w進行訪問并入隊列visitedw=True;prin tf("%d->",w);En Queue(Q,w);prin tf("bb n");int Fir
44、stAdjVex(Graph G,int v)/在圖G中尋找第v個頂點的第一個鄰接頂點if(!G .AdjListv) return 0;else return(G.AdjListv->adjvex);int NextAdjVex(Graph G,int v,int u)/在圖G中尋找第v個頂點的相對于u的下一個鄰接頂點ArcNode *p;p=G.AdjListv;while(p->adjvex!=u) p=p->nextarc; / 在頂點 v 的弧鏈中找到頂點 u if(p-> nextarc=NULL) return 0; / 若已是最后一個頂點,返回0else
45、 return(p->nextarc->adjvex); / 返回下一個鄰接頂點的序號 void Initial(SqQueue &Q)/隊列初始化Q.fr on t=Q.rear=0;BOOL QueueEmpty(SqQueue Q)/判斷隊列是否已空,若空返回True,否則返回Falseif(Q.fr on t=Q.rear) return True;else retur n False;BOOL En Queue(SqQueue & Q,i nt ch)/入隊列,成功返回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)/出隊列,成功返回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; /成功出隊列,返回True5哈希表設(shè)計/*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)標志,沒有記錄、有記錄、有過記錄但已被刪除int count; II哈希表中當前元素的個數(shù)HashTable;typedef structint key num; II記錄的數(shù)據(jù)域,只有關(guān)鍵字一項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); /輸入操作選項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); /輸入要刪除記錄的關(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) /只顯示標志為 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); / 顯示哈希表當前記錄數(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+; /沖突處理方法:線性探測再散列if(p>=MAXSIZE) p=p%MAXSIZE; /循環(huán)搜索if(p=p1) return False; /整個表已搜索完,沒有找到待查元素if(k=H.elemp&&H.elemflagp=HAVEKEY) / 查找成功,p 指示待查元素位置return True;else return False; 查找不成功BOOL In sertHash(HashTable & H,Record e)/查找不成功時插入元素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è)置標志為 HAVEKEY,表示該位置已有記錄H.elemp=e.ke ynum; /插入記錄H.count+; /哈希表當前長度加一return True;BOOL DeleteHash(HashTable & H,Record e)/在查找成功時刪除待刪元素e,并返回True,否則返回Falsein t p;if(!SearchHash(H,e.keynum,p) / 表中不存在待刪元素retur n False;elseH.elemflagp=DELKEY; /設(shè)置標志為DELKEY,表明該元素已被刪除H.count-; /哈希表當前長度減一return True;int Hash( in t k n)/ 哈希函數(shù):H(key)=key MOD 11return (k n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視道具租賃倉儲與道具租賃合同解除合同
- 專利商標續(xù)展一體化代理合同
- 高效物流托運補充服務(wù)協(xié)議
- 電競俱樂部戰(zhàn)隊比賽獎金分配與管理協(xié)議
- 高效生物轉(zhuǎn)化項目合伙人權(quán)益保護協(xié)議
- 公司管理調(diào)查報告
- 入職培訓會流程
- 政薪火相傳的傳統(tǒng)美德 課件+-2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 藥事管理促進合理用藥
- 安全我知道活動目標
- 主動脈夾層病人的健康宣教
- 法律文化-形考作業(yè)2-國開(ZJ)-參考資料
- 2025貴州省專業(yè)技術(shù)人員繼續(xù)教育公需科目考試題庫(2025公需課課程)
- 《危險化學品企業(yè)安全生產(chǎn)標準化規(guī)范》專業(yè)深度解讀與應(yīng)用培訓指導(dǎo)材料之4:5管理要求-5.3 安全生產(chǎn)信息與合規(guī)審核(雷澤佳編制-2025A0)
- 《危險化學品企業(yè)安全生產(chǎn)標準化規(guī)范》專業(yè)深度解讀與應(yīng)用培訓指導(dǎo)材料之3:5管理要求-5.2 安全生產(chǎn)責任制(雷澤佳編制-2025A0)
- 2025年鄉(xiāng)村醫(yī)生基礎(chǔ)醫(yī)學知識歷年真題解析及試題
- 2024屆安徽省合肥市高三一模物理試題 無答案
- 2025年體育產(chǎn)業(yè)信息化管理計劃
- 抵押車位合同協(xié)議
- 高校教職工通訊員培訓
- 理化外包合同協(xié)議
評論
0/150
提交評論