#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <windows.h>
#define MaxSize 100
//聯(lián)系人數(shù)據(jù)類型構(gòu)造
struct person
{
?char name[20];//name
?char phone[13];//phone
};
typedef struct
{?struct person data[MaxSize];??//存放順序表元素
?? ?int length;?????//存放順序表的長度
} SqList;??????//順序表的類型定義
/*
函數(shù)功能:初始化順序表
函數(shù)形參: SqList *&L
函數(shù)返回值:無
*/
void InitList(SqList *&L)
{
?L=(SqList *)malloc(sizeof(SqList));?//分配存放線性表的空間
?L->length=0;
}
/*
函數(shù)功能:創(chuàng)建順序表
函數(shù)形參: SqList *L,struct perspn a[],int n
函數(shù)返回值:無
*/
void CreateList(SqList *L,struct person a[],int n)//建立順序表
{
?int i;
?for (i=0;i<n;i++)
??L->data[i]=a[i];
?L->length=n;
}
/*
函數(shù)功能:判斷順序表是否為空
函數(shù)形參: SqList *L
函數(shù)返回值:1代表空表,0代表非空表
*/
int ListEmpty(SqList *L)
{
?return(L->length==0);
}
/*
函數(shù)功能:創(chuàng)輸出順序表
函數(shù)形參: SqList *L
函數(shù)返回值:無
*/
void DispList(SqList *L)
{
?int i;
?for (i=0;i<L->length;i++)
??{printf("name:%s \n",L->data[i].name);
?printf("name:%s \n",L->data[i].phone);
?}
?printf("\n");
}
/*
函數(shù)功能:求順序表表長
函數(shù)形參: SqList *L
函數(shù)返回值:整數(shù)表示? 表的長度
*/
int ListLength(SqList *L)
{
?return(L->length);
}
/*
函數(shù)功能:按位序找順序表中元素
函數(shù)形參: SqList *L,struct perspn a[],int n
函數(shù)返回值:0表示未找到,1表示查找到
*/
int GetElem(SqList *L,int i,struct person &e)
{
?if (i<1 || i>L->length)
??return 0;
?e=L->data[i-1];
?return 1;
}
/*
函數(shù)功能:銷毀順序表
函數(shù)形參: SqList *&L
函數(shù)返回值:無
*/
void DestroyList(SqList *&L)
{
?free(L);
}
/*
函數(shù)功能:根據(jù)元素查找位序
函數(shù)形參:L,e
函數(shù)返回值:0---未查找到 非0---該元素的邏輯位序
*/
int ElemLocate(SqList *L,struct person e)
{
?int i;? //說明語句
?for(i=0;i<L->length;i++)
??if(strcmp(e.name,L->data[i].name)==0)? printf("此人電話為: %s",L->data[i].phone);return i+1;
?return 0;
}
/*
函數(shù)功能;InsertList()在指定位置上插入元素
函數(shù)形參:L,i(邏輯位序),e
函數(shù)返回值:返回0表示插入失敗(位序不合法,順序表已滿),返回1插入成功
*/
int InsertList(SqList *L,int i,struct person e)
{
?int j;
?//判斷位序合法性,是否溢出
?if(i<1||i>L->length) return 0;
?if(L->length==MaxSize) return 0;
?//插入點(diǎn)后所有數(shù)據(jù)依次后移
?for(j=L->length-1;j>=i-1;j--)
??L->data[j+1]=L->data[j];
?L->data[i-1]=e;
?L->length++;
?return 1;
}
/*
函數(shù)功能:指定位置上的元素刪除
函數(shù)形參:L,i,e(保存被刪除元素,類似回收站)
函數(shù)返回值:返回0表示刪除失?。ㄎ恍虿缓戏ǎ蚩毡恚?,返回1表示成功刪除
*/
int DeleteList(SqList *L,int i,struct person &e)
{
?int j;
?//判斷位序是否合法 是否空表
?if(i<1||i>L->length) return 0;
?if(L->length==0)??? return 0;
?//先保存被刪除元素
?e=L->data[i-1];
?//刪除操作的實(shí)質(zhì)就是刪除點(diǎn)后所有元素前移
?for(j=i;j<L->length;j++)
??L->data[j-1]=L->data[j];
?L->length--;
?return 1;
};
void menu()
{
?printf("手機(jī)通訊錄程序\n");
?printf("1--------顯示所有聯(lián)系人\n");
?printf("2--------顯示姓名查找聯(lián)系人\n");
?printf("3--------增加一個(gè)聯(lián)系人\n");
?printf("4--------刪除一個(gè)聯(lián)系人\n");
?printf("0--------退出系統(tǒng)\n");
}
int ElemLocate2(SqList *L,struct person e)
{
?int i,k;? //說明語句
?for(i=0;i<L->length;i++)
??if(strcmp(e.name,L->data[i].name)==0)?
???k=i+1;
?int j;
?//判斷位序是否合法 是否空表
?if(k<1||k>L->length) return 0;
?if(L->length==0)??? return 0;
?//先保存被刪除元素
?e=L->data[k-1];
?//刪除操作的實(shí)質(zhì)就是刪除點(diǎn)后所有元素前移
?for(j=k;j<L->length;j++)
??L->data[j-1]=L->data[j];
?L->length--;
?return 1;
}
int main()
{
?int i=1;
?SqList *L;
?int select;
?struct person phone[]={{"fxc","123456789"},{"fc","23654534"}},e;
?printf("正在初始化順序表...\n");
?InitList(L);
?printf("正在導(dǎo)入數(shù)據(jù)...\n");
?CreateList(L,phone,2);
?system("PAUSE");
?system("CLS");
?
?while(1)
?{
?menu();
?scanf("%d",&select);
?switch(select)
? {
?case 1: DispList(L);break;
?case 2: printf("請輸入要查找的姓名");scanf("%s",e.name);ElemLocate(L,e);????????? break;
?case 3: printf("請輸入要添加的聯(lián)系人");scanf("%s %s",e.name,e.phone);InsertList(L,i,e);DispList(L);??????????? break;
?case 4: printf("請輸入要?jiǎng)h除的聯(lián)系人姓名");scanf("%s",e.name);ElemLocate2(L,e);DispList(L);????????? break;
?case 0: exit(0);
? }
?}
system("PAUSE");
return 0;
}