头文件
#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);
}