单链表通讯录(排序)

头文件:

#ifndef _ADRESS_H
#define _ADRESS_H
#define SUCCESS 10000
#define FAILURE 10001
#define  TURE   10003
#define FALSE   10004

struct adress
{
	char name[20];
	int num;
	struct adress *next;
};
typedef struct adress Sad;
typedef int ElemType;

int LinkInit(Sad **l);
void welcome ();
void menu();
int add(Sad *l);
int addressTraver(Sad *l, void (*p)(ElemType),void (*pp)(char *));
int LocatElem(Sad *l);
int change ( Sad *l,int (*p)(char*,char*));
int delete (Sad *l);
int rever(Sad *l);
int clear(Sad *l);
int destory(Sad **l);

#endif

函数文件(加上了printf,要不太麻烦)

#include "adress.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void menu()// 主界面
{
    printf("*************welcome to use********\n");    
    printf("**1 功能简介           2 添加信息**\n");
	printf("**3 查看信息           4 查找信息**\n");
	printf("**5 修改信息           6 删除信息**\n");
	printf("**7 反转信息           8 清空信息**\n");
	printf("**9 毁坏信息           10  退出  **\n");
	printf("*************************************\n");
}
function()
{
    printf("!!!!!!!!想多了!!!!!!! \n");
}
void welcome()//欢迎
{

    system("clear");
    printf("\n\n\n\n\n\n\n\n\n\n\n************************************************\n");
    printf("********************WELCOME*********************\n");
    printf("***************老式山寨诺基亚版*****************\n");
    sleep(2);  
}
int LinkInit(Sad **l)// 初始化
{
    *l = (Sad *)malloc(sizeof(Sad)*1);
    if(NULL == *l)
    {
        return FAILURE;
    }
    (*l)->next = NULL;
    return SUCCESS;
}

int add(Sad *l)// 添加信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	Sad *q = l;
	while(q)
	{
		Sad *p = (Sad *)malloc (sizeof (Sad)*1);
		printf("please input name:\n");
		scanf("%s",p->name);
		if(strcmp(p->name,"fine") == 0)
            break;
		printf("please input the num:\n");
		scanf("%d",&p->num);
		p->next = q->next;
		q->next = p;
		q = q->next;
	}
	
	
	char *a;                                //冒泡
	a = (char *)malloc(sizeof(char)*20);
	int x = 0;
	Sad *s = l;
	Sad *k = l;
	for(s = l;s != NULL;s=s->next)
	{
		for(k = s->next; k != NULL;k = k->next)
		{
			if(strcmp(s->name,k->name) > 0)
			{
				
				strcpy(a,k->name);
				strcpy(k->name,s->name);
				strcpy(s->name,a);
				x = k -> num;
				k-> num = s->num;
				s->num = x;
			}

		}

		
	}
				
	return SUCCESS;

	
	
	/*Sad *q = l->next;                //插入
	Sad *f = l;
	while(1)
	{
		Sad *p = (Sad *)malloc (sizeof (Sad) * 1);
		printf("please input name:\n");
		scanf("%s",p->name);
		if(strcmp(p->name,"fine") == 0)
		{   
			free(p);
			break;
		}
		printf("please input the num:\n");
		scanf("%d",&p->num);
	
		while(f)
		{
			printf("************\n");
			if(strcmp(p->name,q->name) < 0)
			{
				printf("************\n");
				p->next = f->next;
				f->next = p;
			}
			printf("************\n");
			q = q->next;
			f = f->next;
			
		}
		
			if(strcmp(p->name,q->name) > 0)
			{
					q->next = p;
					p->next = NULL;
			}
		
		
	}*/

}
int addressTraver(Sad *l, void (*p)(ElemType),void (*pp)(char *))//遍历
{
	if (NULL == l)
	{
		return FAILURE;
	}	
	Sad *q = l;
	while (q->next)
	{
		q = q -> next;
		pp(q->name);
		p(q->num);
	}
	return SUCCESS;
}
int LocatElem(Sad *l) //寻找信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char lookname[20] = {0};
	printf("please input the name to lookfor:\n");
	scanf("%s",lookname);
	Sad *q = l->next;
	while (q)
	{
		if (strcmp(lookname,q->name) == 0)
		{
			printf("name:%s\n",q->name);
			printf("num:%d\n",q->num);
			return SUCCESS;
			break;
		}
		q = q->next;
		
	}
	return FAILURE;
	
}
int change ( Sad *l,int (*p)(char*,char*))//更改信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char changename[20] = {0};
	Sad *q = l->next;
	printf("please input the name to change:\n");
	scanf ("%s",changename);
	while(q)
	{
		if (p(changename,q->name) == TURE)
		//if (strcmp(changename,q->name) == 0)
		{
			int b;
			printf("1 change name  2 change num \n");
			scanf ("%d",&b);
			if(b == 1)
			{
				printf("input the name you want to change:\n");
				scanf ("%s",q->name);
				return SUCCESS;
				break;

			}
			else if(b == 2)
			{
				printf("input the new num:\n");
				scanf("%d",&q->num);
				return SUCCESS;
				break;
			}
		}
		else
		{
			q = q->next;
		}
	}
	if (q == NULL)
	{
		printf("There are not the name!\n");
		return FAILURE;
	}
}
int delete (Sad *l)//通过搜索名字进行删除
{
	if(NULL == l)
	{
		return FAILURE;
	}
	char deletename[20] = {0};
	printf("please input the name to delete:\n");
	scanf("%s",deletename);
	Sad *q = l->next;
	while(q)
	{
		if (strcmp (deletename,q->name) == 0)
		{
			Sad *n = q;
			int e;
			e = n->num;
			q->next = n->next;
			free(n);
			printf("Delete %d success!\n",e);
			return SUCCESS;
			break;
		}
		else
		{
			q = q->next;
		}
	}
	if(q == NULL)
	{
		printf("There are not the name!\n");
		return FAILURE;
	}
}
int rever(Sad *l)//实现排名反转
{
	if (NULL == l)
	{
		return FAILURE;
	}
	Sad *p = l->next;
	l->next = NULL;
	while (p != NULL)
	{
		Sad *q = p;
		p = p->next;
		q->next = l->next;
		l->next = q;
	}
	return SUCCESS;
}
int clear(Sad *l) //清除信息
{
	if(NULL == l)
	{
		return FAILURE;
	}
	Sad *p = l->next;
	while(p)
	{
		l->next = p->next;
		free(p);
		p = p->next;
	}
	return SUCCESS;	
}
int destory(Sad **l) //毁坏
{
	if(NULL == *l)
	{
		return FAILURE;
	}
	free (*l);
	*l = NULL;
	return SUCCESS;
}

 测试文件:

#include "adress.h"
#include <stdio.h>
#include <stdlib.h>

void print(ElemType e)
{
	printf(" num:%d \n",e);
}
void print2(char *a)
{
	printf("name :%s ",a);
}
int Equal(char *e1,char *e2 )
{
	return (strcmp(e1,e1) == 0)? TURE : FALSE;
}
int main()
{
	Sad *m;
	LinkInit(&m);
    int choose,ret;
    welcome(); 
    while (1)
    {
        menu();
        scanf("%d",&choose);
        switch(choose)
        {
            case 1:ret = function();
				if (ret == SUCCESS)
				{
					printf(" Init success!\n");
				}
				else
				{
					printf(" Init failure!\n");
				}
			
                   break;
            case 2:ret = add(m);
				if(ret == SUCCESS)
				{
					printf("Insert success!\n");
				}
				else 
				{
					printf("Insert failure!\n");
				}
                   break;
            case 3:ret = addressTraver(m,print,print2);
				if(ret == SUCCESS)
				{
					printf(" Traver success!\n");
				}
				else
				{
					printf(" Traver failure!\n");
				}
                
                   break;
            case 4:ret = LocatElem(m);
				if(ret == SUCCESS)
				{
				printf(" LocatElem success!\n");
				}
				else
				{
					printf(" LocatElem failure!\n");
				}
                
                   break;
            case 5:ret = change(m,Equal);
				if(ret == SUCCESS)
				{
					printf(" Change success!\n");
				}
				else
				{
					printf(" Change failure!\n");
				}
                 
                   break;
            case 6:ret = delete(m);
				if(ret == SUCCESS)
				{
					printf(" Delete success!\n");
				}
				else
				{
					printf(" Delete failure!\n");
				}
                   break;
            case 7:ret = rever(m);
				if(ret == SUCCESS)
				{
					printf(" rever success!\n");
				}
				else
				{
					printf(" rever failure!\n");
				}
					break;
            case 8:ret = clear(m);
				if(ret == SUCCESS)
				{
					printf(" Clear success!\n");
				}
				else
				{
					printf(" Clear failure!\n");
				}
                   break;
			case 9:ret = destory(&m);
				if(ret == SUCCESS)
				{
					printf(" Destory success!\n");
				}
				else
				{
					printf(" Destory failure!\n");
				}
					break;
			case 10 : exit(1);
					break;
        }
 
    }
    
}

猜你喜欢

转载自blog.csdn.net/chenxinntu/article/details/81435603
今日推荐