链表通讯录基础功能

头文件

#ifndef _LINKLIST_H
#define _LINKLIST_H

#define FAILURE    10000
#define SUCCESS    10001
#define TRUE       10002
#define FALSE      10003
#define NONE                 "\e[0m"
#define BLACK                "\e[0;30m"
#define L_BLACK              "\e[1;30m"
#define RED                  "\e[0;31m"
#define L_RED                "\e[1;31m"
#define GREEN                "\e[0;32m"
#define L_GREEN              "\e[1;32m"
#define BROWN                "\e[0;33m"
#define YELLOW               "\e[1;33m"
#define BLUE                 "\e[0;34m"
#define L_BLUE               "\e[1;34m"
#define PURPLE               "\e[0;35m"
#define L_PURPLE             "\e[1;35m"
#define CYAN                 "\e[0;36m"
#define L_CYAN               "\e[1;36m"
#define GRAY                 "\e[0;37m"
#define WHITE                "\e[1;37m"

typedef int ElemType; 

struct node
{
	char name[20];
	ElemType old;   //数据域
	ElemType phone;
	struct node *next;   //指针域
};

typedef struct node Node;

int LinkInit(Node **l);
void LinkInsert(Node *l);
void seek(Node *l);
void delete(Node *l);
void chglist(Node *l);

#endif

main函数

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


int main()
{
	int ret, i, choice;
	Node *first = NULL;   //头指针
	system("clear");
	ret = LinkInit(&first);
	if (ret == FAILURE)
	{
		printf(YELLOW"\n\n\n******************************\n");
		printf("******************************************\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(L_PURPLE"\n  系统空间不足,无法初始化通讯录!\n"NONE);
		printf(L_BLUE"**________**________**_______**____\n"NONE);
		printf(YELLOW"\n*************************************\n");
		printf("*****************************************\n"NONE);
		exit(0);
	}
	else
	{
		printf(YELLOW"\n\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
		printf(L_PURPLE"\n  通讯录初始化成功!即将进入系统服务\n"NONE);
		printf(YELLOW"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
	}
	
	sleep(3);
	
	
	welcome();

	while(1)
	{
		menu();

		printf("请输入功能选项:\n");
		printf("Please input:\n");

		scanf("%d", &choice);

		switch(choice)
		{
			case 1:
				LinkInsert(first);
				break;
			case 2:
				LinkTraverse(first);
				break;
			case 3:
				seek(first);
				break;
			case 4:
				delete(first);
				break;
			case 5:
				chglist(first);//修改
				break;
			case 6:
				printf("你爱过大海,我爱过你\n");
				sleep(3);
				system("clear");
				exit(0);
				break;
		}
	}
	
	return 0;
}

功能函数

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

int LinkInit(Node **l)
{
	*l = (Node *)malloc(sizeof(Node) * 1);   //分配头结点   l 就是头指针
	if (NULL == *l)
	{
		return FAILURE;
	}

	(*l)->next = NULL;    //头结点指针域为空

	return SUCCESS;
}

void LinkInsert(Node *l)  //n 插入的位置
{

	char flag = 'y';
	
	Node *p = l;
	while(flag == 'y')
	{
		

		if (NULL == l)
		{
			printf("地址空间申请失败!\n");
			sleep(2);
			break;
		}

		while (p->next != NULL)
		{
			p = p->next;
			
		}


		Node *q = (Node *)malloc(sizeof(Node) * 1);
		if (NULL == q)
		{
			printf("malloc error!\n");
			sleep(2);
			break;
		}

		printf(L_PURPLE"请输入添加联系人的信息:name,old,phone:\n"NONE);
		
		scanf("%s", q->name);
		getchar();
		scanf("%d",&q->old);
		getchar();
		scanf("%d", &q->phone);
		q->next = p->next;
		p->next = q;
		
		printf("是否继续添加:y or n ?\n");
		getchar();
		
		scanf("%c", &flag);
	}
	
}

void LinkTraverse(Node *l)
{
	
	if (NULL == l)
	{
		printf("malloc error !\n");
	}
	Node *q = l;

	while (q->next)
	{
		q = q->next;
		printf("%s %d %d\n", q->name, q->old, q->phone);
		
	}
	sleep(2);
}

void seek(Node *l)
{
		
	Node *q = l;
	char s[20] = {0};
	printf("请输入要查找的联系人的名字:\n");
	scanf("%s", s);
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, q->name) == 0)
		{
			printf("此人信息如下:%s %d %d\n", q->name, q->old, q->phone);
			break;
			
		}
		
	}
	if(q == NULL)
		printf("查无此人");
		sleep(2);
	
}

void delete(Node *l)
{
	char s[20] = {0};
	printf("请输入想要删除的联系人名字:\n");
	scanf("%s", s);
	Node *q = l;

	if (l == NULL)
	{
		printf("malloc error !\n");
		sleep(2);
	}
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, (q->next)->name) == 0)
		{
			break;
			
		}
		
	}
	
	Node *n = q->next;
	q->next = n->next;
	free(n);

}

void chglist(Node *l)
{
	Node *q = l;
	char s[20] = {0};
	printf("请输入要修改的联系人的名字:\n");
	scanf("%s", s);
	
	while(q->next)
	{
		q = q->next;
		if(strcmp(s, q->name) == 0)
		{
			printf("请重新输入该联系人的信息:\n");
			scanf("%s", q->name);
			getchar();
			scanf("%d", &q->old);
			getchar();
			scanf("%d", &q->phone);
			break;
			
		}
		
	}
	if(q == NULL)
		printf("查无此人");
		sleep(2);
	
}

int LinkLength(Node *l)
{
	if (NULL == l)
	{
		return FAILURE;
	}

	int len = 0;
	Node *p = l->next;

	while (p)
	{
		len++;
		p = p->next;
	}

	return len;
}

int LinkEmpty(Node *l)
{
	return (l->next == NULL) ? TRUE : FALSE;
}

int GetElem(Node *l, int p, ElemType *e)    //p 位置
{
	if (NULL == l || p < 1)   //入参判断  p不能小于0
	{
		return FAILURE;
	}

	Node *q = l;
	int i;

	for (i = 0; i < p && q != NULL; i++)    //循环p次,同时满足q不为空
	{
		q = q->next;
	}

	if (!q)      //如果q为空,说明p(位置)大于长度
	{
		return FAILURE;
	}

	*e = q->old;     //q已经指向第p个结点

	return SUCCESS;
}

int LocateElem(Node *l, ElemType e, int (*p)(ElemType, ElemType))
{
	if (NULL == l)
	{
		return FAILURE;
	}
	
	Node *q = l->next;
	int len = 1;

	while (q)
	{
		if (p(e, q->old) == TRUE)
		{
			return len;
		}
		q = q->next;
		len++;
	}

	return FAILURE;
}

int LinkDelete(Node *l, int p, ElemType *e)
{
	int k = 1;
	Node *q = l;

	if (l == NULL)
	{
		return FAILURE;
	}

	while (k < p && q != NULL)
	{
		q = q->next;
		k++;
	}

	if (k > p || q == NULL)
	{
		return FAILURE;
	}

	Node *n = q->next;
	*e = n->old;
	q->next = n->next;
	free(n);

	return SUCCESS;
}

int LinkClear(Node *l)
{
	if (NULL == l)
	{
		return FAILURE;
	}

	Node *p = l->next;

	while (p)
	{
		l->next = p->next;
		free(p);
		p = l->next;
	}

	return SUCCESS;
}

int LinkDestroy(Node **l)
{
	if (l == NULL)
	{
		return FAILURE;
	}
	free(*l);
	(*l) = NULL;

	return SUCCESS;
}

int LinkReverse(Node *l)
{
	if (NULL == l)
	{
		return FAILURE;
	}

	Node *p = l->next;
	l->next = NULL;

	while (p != NULL)
	{
		Node *q = p;
		p = p->next;
		q->next = l->next;
		l->next = q; 
	}

	return SUCCESS;
}

void welcome()
{
	system("clear");

	printf(L_BLUE"**************************************\n"NONE);
	printf(L_PURPLE"\n欢迎来到澳门赌场 \n"NONE);
	printf(YELLOW"\n************************************\n");
	
	sleep(2);
}

void menu()
{
	system("clear");
	
	printf(GREEN"\n\n\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n\n"NONE);
	printf(BLUE"        1、添加联系人                2、查看联系人信息\n"NONE);
	printf(PURPLE"      3、查找联系人                4、删除联系人信息\n"NONE);
	printf(L_GREEN"     5、修改联系人                6、离开赌场\n"NONE);
	printf(GREEN"\n******************************************************************\n\n\n"NONE);
}

猜你喜欢

转载自blog.csdn.net/GX0401/article/details/81461259
今日推荐