数据结构 顺序表实现手机通讯录

代码

#include  
#include 
#include 
#include 
#include 
#include 
//#include  
typedef struct {
	char name[10];
	char ptel[13];//联系号码 
	char qq[11];
	char wtel[13];//办公号码 
}ElemType;

typedef struct {
	ElemType date[50];
	int length;
}SqList; 


//初始化线性表 
void InitList(SqList *&L){
	L=(SqList *)malloc(sizeof(SqList));  //为线性表分别配空间 
	L->length=0;
}

//输出线性表 
void DispList(SqList *L){
	int i;
	printf(" NO        MAME       PTEL               QQ              WTEL\n");
	for(i=0;ilength;i++){
		printf(" %2d%12s%18s%17s%18s\n",i+1,L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
		fflush(stdin);//清空输入缓冲区 
	} 
	printf("\n");
} 

//插入数据元素
bool ListInsert(SqList *&L,int i,ElemType e){  //boolean
	int j;
	if(e.name=="\0"||i<1||i>L->length+1){
		printf("插入失败!\n\n");
		return false;
	}    
	i--;//将逻辑序号转化为物理序号
	
	for(j=L->length;j>i;j--){
		L->date[j]=L->date[j-1];  //将元素后移 
	} 
	L->date[i]=e;
	L->length++;
//	printf("length=%d\n\n",L->length);
	return true; 
} 

//删除数据元素
bool ListDelete(SqList *&L,int i,ElemType &e){
	int j;
	if(i<1||i>L->length+1){
			printf("删除失败!\n\n"); 
			return false;    	
	} 
	i--;//将逻辑序号转化为物理序号
	
	e=L->date[i];
	for(j=i;jlength;j++){
		L->date[j]=L->date[j+1];  //将元素前移 
	} 
	L->length--;
	printf("删除成功!\n\n"); 
//	printf("length=%d\n\n",L->length);
	return true; 
} 


//查询联系人 
int LocateElem(SqList *L,ElemType e){
	int i=0;
	while(ilength&&strcmp(L->date[i].name,e.name)!=0) //strcmp()  比较字符串 ,相等返回0 
		i++;
	if(i>L->length){
		return 0;
	}
	else{
//		puts(L->date[i].name);//puts()  向栈顶添加元素(线性表后面) 
//		puts(L->date[i].ptel);
//		puts(L->date[i].qq);
//		puts(L->date[i].wtel);
		printf("name:%s  ptel:%s  qq:%s  wtel:%s\n\n",L->date[i].name,L->date[i].ptel,L->date[i].qq,L->date[i].wtel);
		return(i+1);
	}
}

//输出联系人数 
void CountList(SqList *L){ 
	printf("目前联系人总数:%d\n\n",L->length);
} 

//摧毁线性表 
void DestroyList(SqList *L)
{
	free(L->date); //使用free函数,释放空间 
    L->length = 0; 
	printf("销毁成功!\n\n"); 
}


void menu1(){  //打印菜单 
	printf("        -----------------------------\n");
	printf("             手机通讯录的应用\n"); 
	printf("        -----------------------------\n");
	printf("             1.初始化通讯录\n"); 
	printf("             2.增加联系人信息\n"); 
	printf("             3.显示联系人信息\n"); 
	printf("             4.删除联系人信息\n"); 
	printf("             5.查找联系人信息\n"); 
	printf("             6.退出\n");
	printf("             扩展功能:\n");
	printf("             7.查询当前联系人人数\n"); 
	printf("             8.销毁通讯录\n"); 
	printf("        -----------------------------\n"); 
} 

 
int main(){
	SqList *L;
	int flag=1;
	int i,j;
	ElemType s[4]={ "林一","13845467326","123234675","15278538464",
					"林二","12547722234","243624213","12734532894",
					"林三","13254678924","317643927","13423137876",
					"林四","14219834567","244292934","17683273484"};
	ElemType e; 
	InitList(L);
	menu1();
	for(int i=0;i<4;i++){
		ListInsert(L,i+1,s[i]);
	} 
	DispList(L);
	
	while(flag){
		printf("请选择:");
		scanf("%d",&j);
		switch(j){
			case 1:
				InitList(L);
				printf("初始化成功!\n\n");
				break; 
			case 2:
				printf("请以次输入联系人信息:");
				scanf("%s %s %s %s",e.name,e.ptel,e.qq,e.wtel);
				printf("请输入插入的位置:");
				scanf("%d",&i); 
				fflush(stdin);//清空输入缓冲区,确保不影响后面的数据读取
				if(ListInsert(L,i,e)){
					printf("插入成功!\n\n");	
				}
				break;
			case 3: 
				DispList(L);
				break;
			case 4:
				printf("请输入删除的联系人位置:");
				scanf("%d",&i);
				ListDelete(L,i,e);
				break;
			case 5:
				printf("请输入查询的联系人姓名:");
				scanf("%s",&e.name);
				LocateElem(L,e);
				break;
			case 6:
				flag=0;
				printf("退出成功!\n\n");
				break;
			case 7:
				CountList(L);
				break;
			case 8:
				DestroyList(L); 
				break;
			default:
				printf("输入有误!\n\n");
				break;						 
		}
	}
	return 0;
} 

运行结果

数据结构 顺序表实现手机通讯录_第1张图片

你可能感兴趣的:(c++,c#,数据结构,链表)