亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 哈希表學生管理系統.cpp

?? 數據結構課程設計(嚴蔚敏c版) 哈希表學生管理系統
?? CPP
字號:
/*******************************************************************************

    
程序名稱 : 哈希表學生管理系統

作者 : 040540227 張歡

單位 : 南京航空航天大學信息科學與技術學院

完成時間 : 2007年1月10號

程序功能 : 1.把學生的信息(姓名,學號)插到哈希表中。
           2.按照姓名或學號查找學生。
		   3.刪除某學生。
           4.查看哈希表內容。
		   5.修改某學生的信息。

主要用的知識 : 哈希表存儲方式,鏈地址解決沖突,函數調用,循環控制,字符串處理等等。 


希望廣大用戶及時反饋意見以便我們為您提供更好的服務,謝謝!
		   

********************************************************************************/

#include"stdio.h"
#include"conio.h"
#include"string.h"
#include"stdlib.h"


typedef struct student                     //學生結點
{
	char name[16];
	char number[11];
    struct student *next;          

}student;

/**************************************全局變量***********************************/
 
student *HashTable[16];                    //數組里的16個值元素都是頭指針(什么都不存),全局變量
char name[16];
char number[11];
int  location;                              //地址
	
/*************************************哈希函數***********************************/

int Hash(char *str)                        //哈希函數
{
	int i;

	i = strlen(str);

	return i;
}

/*********************************按姓名查找************************************/

student  *search1(char *name)              //按姓名查找的簡單,因為可以用哈希函數
{   
	student *p;

	location = Hash(name);                 //此同學應該存放的地址
	
	p = HashTable[location];

	while (p && strcmp(p->name,name))      //p指針不空并且p->name不是要找的那個name則循環進行
	     p = p->next;
 
	if (!p)
	
   	    return NULL;                      //返回空指針 
	
    else
    
		return p;                          //返回指針p
	 
}
     
/*********************************按學號查找************************************/

student  *search2(char *number)                          
{   
	int i;
	student *p,*q;

	for(i = 0 ; i < 16 ; i++)
	{ 
	     p = HashTable[i];
    
	     if (p == NULL)              //該地址上沒有元素的情況
		      
			 continue;              //p等于下一個位置上的指針
	
	     else if (p->next == NULL)   //該地址上只有1個元素的情況
		 {
		   if (strcmp(p->number,number))
			
			   continue;
		   
		   else
		  
		       return p;
		    
		      
		 }
	
        else                          //該地址上多于1個元素的情況
		{
		      
		      q = HashTable[i];       //此時p和q都是HashTable[i]
	
              while (p && strcmp(p->number,number))          //p指針不空并且p->name不是要找的那個name則循環進行
			  {
		         q = p;              //保持q在p的前面
		         
				 p = p->next;
			  }

	          if (!p)
		      
				  continue;        

	          else                   //p指針所指的結點 p->name就是要查找的name
			  
		          return p;
			  
		} 
	} 
    
    
	return NULL;                    //如果直到i=16時才結束,正常結束,則沒有找到該學號的學生
	
}

/*******************************插入某指針指向的結點*****************************/

void ins(student *q)
{
    location = strlen(q->name);

	if (HashTable[location] == NULL)          //此位置上還沒有插入一個元素
	{
		HashTable[location] = q;           // HashTable[location]指向node

		q->next = NULL;
	}
        
	else                                      //向前插
	{
		q->next = HashTable[location];     //HashTable[location] 是指針!!
	    
		HashTable[location] = q;
		
	}

}

/*********************************刪除p指針所指的結點****************************/

void del(student *p)                //刪除p指針所指向的結點
{   
	student *q;
	int location = Hash(p->name);   //找到地址

	if (p->next == NULL)             //要刪除的元素所在地址上只有1個元素的情況
	{
		 HashTable[location] = NULL;	  
		 
		 free(p);
	}
		 
	 
	
    else                           //要刪除的元素所在地址上多于1個元素的情況
	{
		 p = HashTable[location];
		
		 q = HashTable[location];
	
         while (p && strcmp(p->name,name))          //p指針不空并且p->name不是要找的那個name則循環進行
		 {
		    q = p;                 //保持q在p的前面
		    
			p = p->next;
		 }
                                   //循環結束時已經找到要刪的結點了
	        q->next = p->next;
	        
			free(p);               //刪除p結點
	 }

}

/************************************插入****************************************/

void Insert()                      //插入完成
{   
	
	 
	student *node;
	
	 
	printf("請輸入要插入的同學的姓名(漢語拼音,字符不多于15個):\n");
	gets(name);

	printf("請輸入要插入的同學的學號(不多于10位):\n");
	gets(number);
    
	 

	node = (student *)malloc(sizeof(struct student));
	
	node->next = NULL;
	
	strcpy(node->name,name);          //復制字符串
	
	strcpy(node->number,number);
	
	location = Hash(node->name);      //找到應該插入的位置

	if (HashTable[location] == NULL)   //此位置上還沒有插入一個元素
	{
		HashTable[location] = node;   // HashTable[location]指向node
        
		printf("  插入完成!\n\n");
	}

	else                              //向前插
	{
		node->next = HashTable[location];     //HashTable[location] 是指針!!
	    
		HashTable[location] = node;
		
		printf("  插入完成!\n\n");
	}

}

 
void Delete()                                //按姓名刪除
{
    student *p; 
	char info[16];
	
	printf("請輸入要刪除的同學的姓名或學號:\n");
	gets(info);

	if (info[0] >= '0' && info[0] <= '9')    //知道輸入的是學號
	{ 	   
		p = search2(info);
		
		if(!p)
		{
			printf("沒有此學號的學生,無法修改信息!\n\n");
		   
			return;
		}

		else
		{
			del(p);
	 	
			printf("刪除成功!\n\n");
			
			return;
		}
	}

	else
	{
		p = search1(info);
		
		if (!p)
		{
			printf("沒有此學號的學生,無法修改信息!\n\n");
		    
			return;
		}
	
		else
		{
			del(p);
	 	    
			printf("刪除成功!\n\n");
			
			return;
		}

	}
}

/**********************************輸出哈希表全部的內容*******************************/

void print()
{   
	int i ;
	student *p ;
	
	printf("哈希表的所有元素及所在地址如下:\n");
	
	for (i = 0 ; i < 16 ; i++)
	{
		printf("%-2d :",i);
		
		if (!HashTable[i])        
	
			printf("\n");                           //如果是空指針
		
		else                                    //輸出該地址下所有的元素
		{
			for(p = HashTable[i] ; p ; p = p->next)
			{
				printf("%s",p->name);           //姓名
				
				printf("(%s)",p->number);       //學號
			   
				if (p->next)
			 
					printf("--->");
			}
		    
			printf("\n");
		} 
		 
	}
}

/******************************************修改內容**************************************/


void change()                                      //雖然復雜,但是思想簡單
{   
	char ch;
	char info[16];                                 //可以放姓名可以放學號
	char str[16];
	char c;
	int i;
	student *p, *q;
	
	printf("請輸入你要更改信息的學生的姓名或學號:\n"); //這里我用了一個小技巧
	gets(info);

	if (info[0] >= '0' && info[0] <= '9')          //知道輸入的是學號
	{	
		p = search2(info);

		if (!p)
		{	
			printf("沒有此學號的學生,無法修改信息!\n\n");
		    return ;
		}

		else                                        //要修改的人在哈希表中
		{   
			i=strlen(p->name);

			printf("你要修改姓名,還是學號?請選擇1.姓名.2.學號.\n");
		    
			c = getch();
			
			if (c == '1')
			{   
		    	printf("\n此人姓名是:%s.請輸入改變后的姓名(如果新名字長度和原來不一樣,則此學生將要換到哈希表中的另一個位置上!):\n",p->name);

			  	gets(str);
				
				if (strlen(str)!=strlen(p->name))
				{   
					q = (student *)malloc(sizeof(struct student));
                                                    //申請新的結點
				    strcpy(q->number,p->number);    //學號保留到q上

					del(p);
					
					strcpy(q->name,str);            //換上新名字,把q所指結點插入到合適的位置上

					ins(q);                         //插入q所指的結點

					printf("姓名更改完畢,該學生已經由原位置%d轉移到位置%d上了!\n\n",i,strlen(q->name));
			 
		            printf("\n");
				}

				else
                {
					strcpy(p->name,str);            //新名字和原來一樣長的
                     
				    printf("姓名更改完畢!\n");
				}   
				 
			}
		
			else                                     //c==2修改學號
			{
				printf("此人學號是:%s.請輸入改變后的學號:",p->number);
			    
				gets(str);
			 	
				strcpy(p->number,str);
				
				printf("學號更改完畢!\n");
				 
			}

		}
	}
	
    else                                             //知道輸入的是姓名
	{	
		p = search1(info);

	 
	    
		if (!p)
		{	
			printf("沒有此姓名的學生,無法修改信息!\n\n");
		
			return ;
		}
        
		else
		{	
			i = strlen(p->name);
			
			printf("你要修改姓名,還是學號?請選擇1.姓名.2.學號.\n");
		    
			c = getch();
			
			if (c == '1')
			{
				printf("\n此人姓名是:%s.請輸入改變后的姓名(如果新名字長度和原來不一樣,則此學生將要換到哈希表中的另一個位置上!):\n",p->name);

			   
				gets(str);
				
				if (strlen(str)!=strlen(p->name))
				{   
					q = (student *)malloc(sizeof(struct student));
                                                    //申請新的結點
				    strcpy(q->number,p->number);    //學號保留到q上

					del(p);
					
					strcpy(q->name,str);            //換上新名字,把q所指結點插入到合適的位置上

					ins(q);

					printf("姓名更改完畢,該學生已經由原位置%d轉移到位置%d上了!\n\n",i,strlen(q->name));
			 
		            printf("\n");
				}

				else
                {
					strcpy(p->name,str);            //新名字和原來一樣長的

				    printf("姓名更改完畢!\n\n");
				}
				 
			}
		
			else                                     //c==2修改學號
			{
				printf("此人學號是:%s.請輸入改變后的學號:",p->number);
			    
				gets(str);
			 	
				strcpy(p->number,str);
				
				printf("學號更改完畢!\n\n");
				 
			}

		}
	}

 }

/**************************************兩種方式查找**************************************/

void  search()                                      //先編查找,兩種方式查找
{
 
    char c;

	printf("你是按姓名查找還是按學號查找?請選擇:1.姓名. 2.學號.\n");
    
	c = getch();

	if (c == '1')
	{
	  printf("請輸入你要查找的人的姓名(不多于15個字符):\n");
	 
	  gets(name);
	  
	  printf("%s\n\n",search1(name)?"此人在哈希表中":"查無此人");
	   
	}
    
	else if (c == '2')
	{
	  printf("請輸入你要查找的人的學號(不多于10個字符):\n");
	 
	  gets(number);
	  
	  printf("%s\n\n",search2(number)?"此人在哈希表中":"查無此人");
	   
	} 
                                                     //search1,search2要帶參數,便于傳遞
	else 
	{
		putch(7);
	  
		printf("你輸入了'1','2'之外的字符,請檢查!\n");
	}                                                //輸入的選項有誤則也返回NULL
}



void main()
{
	char menu[220] = "     請選擇你要的操作的序號:\n       1.插入元素\n       2.刪除元素\n       3.查看哈希表\n       4.查找元素\n       5.更改信息\n       6.退出\n "  ;
	char c;
	int i;
    
	printf("\n\n");
	printf("                ****************************************************************\n");
	printf("                **  程序說明:本程序利用哈希表,按照學生姓名(漢語拼音)長度分 **\n");
	printf("                **  配其所在地址,學生信息包括姓名,學號,可以對該表進行插入, **\n");
	printf("                **  刪除,查找,查看,更改信息等操作,是一個管理學生的小系統  **\n");
	printf("                **  ,若發現問題或有好的建議請及時反饋,以便我們為您提供更好  **\n");
	printf("                **  的服務!                                                  **\n");
	printf("                ****************************************************************\n\n\n");
	
	for(i = 0 ; i < 13 ; i++)
		HashTable[i] = NULL;               //初始置空
	    
	
	do
	{
		   puts(menu);

		   c = getch();
		   putchar(c);
		   
		   printf("\n\n");

		   switch (c)
		{
		   case '1' : Insert();
					  break;
		  
		   case '2' : Delete();             //兩種方法的刪除!!
					  break; 
	  		  
		   case '3' : print();
					  break; 

		   case '4' : search();             //兩種方法的查找!!
			          break;  

	       case '5' : change();             //先查找,再修改
		     		  break;  

	       case '6' : printf("謝謝使用本系統,歡迎再次使用!\n") ;    //下面的while中退出!
					  break;

		   default :
					  putch(7) ;
					  printf("輸入有誤,請重新輸入!\n") ; 
		
		} 
	
	}while(c!='6');                       //while后面的';'不可少

				  
}

 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa欧美大片| 久久99精品一区二区三区三区| 国产福利91精品一区| 国产日本一区二区| 成人一区二区三区在线观看 | 国产成a人亚洲精| 国产欧美一区二区精品久导航 | 成人高清免费在线播放| 国产精品麻豆视频| 日本乱人伦一区| 日韩电影免费在线观看网站| 日韩精品一区二区三区在线| 国产尤物一区二区| 亚洲三级在线看| 欧美放荡的少妇| 国产毛片精品国产一区二区三区| 中文字幕一区av| 欧美日韩国产美| 国产麻豆精品视频| 亚洲精品少妇30p| 欧美一区二区三区成人| 国产69精品久久久久777| 亚洲人吸女人奶水| 日韩精品一区二区三区三区免费| 丁香一区二区三区| 午夜婷婷国产麻豆精品| 久久精品综合网| 欧美日韩一区在线观看| 国产一区二区三区在线观看免费| 有码一区二区三区| 欧美mv和日韩mv的网站| 91丨九色丨黑人外教| 免费高清成人在线| 一区二区三区四区亚洲| 久久婷婷色综合| 欧美美女喷水视频| 成人a免费在线看| 久久99精品久久久久久国产越南 | 国产一区二区精品久久99 | 日韩黄色小视频| 国产精品久久久久影院| 91麻豆精品久久久久蜜臀| 国产91精品一区二区| 奇米影视一区二区三区小说| 亚洲人成电影网站色mp4| 久久美女艺术照精彩视频福利播放| 日本韩国一区二区| 99久久免费国产| 狠狠色综合色综合网络| 午夜av一区二区三区| 中文字幕佐山爱一区二区免费| 精品免费日韩av| 欧美日韩小视频| 91老师国产黑色丝袜在线| 国产在线精品一区二区三区不卡 | 亚洲自拍偷拍网站| 中文字幕欧美激情一区| 精品久久久久久久人人人人传媒| 精品视频999| 91福利在线免费观看| 成人激情小说网站| 国产精品亚洲人在线观看| 另类小说综合欧美亚洲| 日日骚欧美日韩| 亚洲一区在线观看视频| 一二三区精品福利视频| 一区二区三区免费在线观看| 亚洲欧洲精品天堂一级| 国产精品剧情在线亚洲| 中国av一区二区三区| 国产情人综合久久777777| 久久久久97国产精华液好用吗 | 国产清纯美女被跳蛋高潮一区二区久久w| 欧美一区二区三区性视频| 在线成人av网站| 4438成人网| 日韩西西人体444www| 日韩欧美亚洲另类制服综合在线 | 国产成人一区在线| 高清国产一区二区| 不卡电影免费在线播放一区| jlzzjlzz欧美大全| 色综合久久久久综合体桃花网| 99综合电影在线视频| 97se狠狠狠综合亚洲狠狠| 色天天综合久久久久综合片| 91久久线看在观草草青青| 欧美亚洲高清一区| 91麻豆精品国产91久久久使用方法| 欧美精品一级二级三级| 日韩免费性生活视频播放| 欧美tickling网站挠脚心| 久久久91精品国产一区二区精品 | 亚洲国产成人自拍| 亚洲日穴在线视频| 亚洲成人一区在线| 老鸭窝一区二区久久精品| 国产一区二区精品久久99| av资源网一区| 欧美视频一区在线观看| 欧美成人精品3d动漫h| 中文字幕精品一区| 亚洲激情五月婷婷| 日本在线不卡视频一二三区| 国产一二精品视频| 91蝌蚪porny| 日韩一区二区三区视频| 欧美国产丝袜视频| 亚洲成人动漫在线观看| 国产在线一区二区| 在线观看91精品国产入口| 日韩免费电影网站| 综合中文字幕亚洲| 人妖欧美一区二区| 99久久夜色精品国产网站| 欧美日韩另类国产亚洲欧美一级| 精品乱人伦一区二区三区| 亚洲欧洲日韩在线| 秋霞电影网一区二区| 色综合久久天天| 久久女同互慰一区二区三区| 亚洲高清免费在线| 国产成人av一区| 6080日韩午夜伦伦午夜伦| 国产精品久久久久国产精品日日| 婷婷国产v国产偷v亚洲高清| 成人黄色免费短视频| 欧美一区二区三区免费| 一区二区在线看| 国产91丝袜在线播放九色| 欧美日韩第一区日日骚| 国产精品久久久久影院色老大| 蜜臀av性久久久久蜜臀aⅴ | 欧美aaaaaa午夜精品| 99久久精品免费观看| 亚洲精品在线免费观看视频| 亚洲理论在线观看| 国产91高潮流白浆在线麻豆 | 亚洲色图欧美在线| 国产精品911| 日韩欧美在线1卡| 亚洲国产精品久久人人爱蜜臀| 成人黄色免费短视频| 久久天天做天天爱综合色| 日韩一区精品字幕| 日本久久电影网| 日韩一区在线免费观看| 国产乱码精品一区二区三| 日韩午夜在线观看视频| 亚洲第一激情av| 色综合久久久久网| 国产精品福利一区| 成人看片黄a免费看在线| 国产嫩草影院久久久久| 国产自产高清不卡| 亚洲精品一区二区三区在线观看 | 免费美女久久99| 欧美精品在线观看一区二区| 亚洲综合无码一区二区| 91在线小视频| 国产精品国产三级国产aⅴ中文| 国产99久久久精品| 国产精品女主播在线观看| 成人免费高清在线| 国产精品嫩草影院com| 不卡在线视频中文字幕| 国产精品久久一级| 一本高清dvd不卡在线观看| 亚洲欧美国产毛片在线| 91久久精品一区二区三区| 有坂深雪av一区二区精品| 欧美在线观看禁18| 丝袜亚洲另类欧美综合| 91麻豆精品国产综合久久久久久| 三级欧美在线一区| 日韩美女视频在线| 国产精品乡下勾搭老头1| 国产精品欧美一区喷水| 一本大道久久a久久精品综合| 亚洲一二三区在线观看| 制服丝袜日韩国产| 经典三级视频一区| 国产精品理论片在线观看| 在线免费精品视频| 奇米色一区二区| 国产午夜精品在线观看| 91无套直看片红桃| 亚洲成人综合网站| 久久在线观看免费| 成人av网在线| 亚洲成人tv网| 久久精品人人做人人爽97| 成人免费不卡视频| 亚洲444eee在线观看| 26uuu成人网一区二区三区| 国产69精品一区二区亚洲孕妇| 亚洲精品你懂的| 久久一二三国产| 91久久精品一区二区三| 精品一区二区三区免费毛片爱|