#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _Person
{
char name[10];
char Phone[12];
struct _Person* next;
}Person;
//初始化
Person* InitList()
{
Person* temp=NULL;
temp=(Person*)malloc(sizeof(Person));
if(temp==NULL)
{
return NULL;
}
strcpy(temp->name,"");
strcpy(temp->Phone,"");
temp->next=NULL;
return temp;
}
//销毁操作
void UnitList(Person* list)
{
Person* p1=NULL;
Person* p2=NULL;
p1=list->next;
while(p1!=NULL)
{
p2=p1->next;
free(p1);
p1=p2;
}
}
//获取第nPos个元素
Person* GetList(Person* list, int nPos)
{
int i=1;
Person* p1;//临时使用指针变量
if(list==NULL)
return NULL;
p1=list->next;
while(list!=NULL && i<nPos-1 )
{
p1=p1->next;
i++;
}
if(p1==NULL)
return NULL;
if(i>nPos)
return NULL;
return p1 ;
}
//插入操作
Person* InsertList(Person* list, int nPos,Person* pitem)
{
Person* p1=NULL;
Person* newnode=NULL;
Person* node; //临时使用指针变量.
int i=1;
if(list==NULL)
return NULL;
p1=list->next;
if(p1==NULL && nPos==1) //插入第一个元素
{
newnode=(Person*)malloc(sizeof(Person));
if(newnode==NULL) //分配是否成功
return list;
strcpy(newnode->name,pitem->name);
strcpy(newnode->Phone,pitem->Phone);
list->next=newnode;
newnode->next=NULL;
// return list;
}
while(p1!=NULL&& i<nPos-1)
{
p1=p1->next;
i++;
}
if(p1==NULL)
return list;
if(i>nPos)
return list;
newnode=(Person*)malloc(sizeof(Person));
if(newnode==NULL) //分配是否成功
return list;
strcpy(newnode->name,pitem->name);
strcpy(newnode->Phone,pitem->Phone);
/*
newnode->next=p1->next;//newnode指向P1的下一个元素地址.
p1->next=newnode;//p1指向新节点地址
*/
node=p1->next;
p1->next=newnode;
newnode->next=node;
return list;
}
Person* DeleteList(Person* list,int nPos,Person* pDelete)
{
Person* p1=NULL; //临时使用指针变量
Person* temp1=NULL;
Person* temp2=NULL;
int i=1;
if(list==NULL)
return NULL;
p1=list->next;
while(p1!=NULL&& i<nPos)
{
p1=p1->next;
i++;
}
if(p1==NULL)
return list;
if(i>nPos)
return list;
temp1=p1->next;
if(temp1==NULL)
return list;
temp2=temp1->next;
//删除操作;
p1->next=temp2;
strcpy(pDelete->name,temp1->name);
strcpy(pDelete->Phone,temp1->Phone);
free(temp1);
temp1=NULL;
return list;
}
Person* ModifyList(Person* list,int nPos,Person* pModify)
{
int i=1;
Person* p1;//临时使用指针变量
if(list==NULL)
return NULL;
p1=list->next;
while(p1!=NULL&& i<nPos)
{
p1=p1->next;
i++;
}
if(p1==NULL)
return NULL;
if(i>nPos)
return NULL;
strcpy(p1->name,pModify->name);
strcpy(p1->Phone,pModify->Phone);
return list;
}
int main()
{
Person newnode;
int i = 0;
Person* head = NULL;
Person* temp = NULL;
Person* perget=NULL;
head = InitList();
for( i = 0 ;i < 20;i++)
{
sprintf(newnode.name ,"good%d",i);
sprintf(newnode.Phone,"151501000%d",i);
InsertList(head,i+1,&newnode);
}
temp = head->next ;
if(temp == NULL)
{
return 0;
}
for( i = 0;temp != NULL;i++)
{
printf("name = %-10s phone = %-10s\n",temp->name,temp->Phone);
temp = temp->next;
}
perget=GetList(head,5);
if(perget!=NULL)
{
printf("Get the 10th:\nname = %8s phone = %8s\n", perget->name, perget->Phone);
}
return 0;
}