链表基本格式
typedef struct array
{
int element;
struct array *nextElement;
}Array;
本文实现的函数
Array* LinkListCreateT(void);
void printLinkList(Array* head);
Array* LinkListDelete(Array *head,int toDelete);
Array* LinkListInsert(Array *head,int toInsert,int position);
Array* delete(Array *head);
Array* Insert(Array* head);
链表操作
1. 头结点的创建
Array* LinkListInit()
{
Array *head;
head=(Array*)malloc(sizeof(Array));
if(head==NULL)
printf("Fail to apply for memory./n");
head->nextElement=NULL;
return head;
}
2.1 链表创建--从头部插入
Array* LinKListCreateH()
{
Array *head =LinkListInit(); //apply for a head node
int inputElement;
while (scanf("%d",&inputElement)!=EOF) {
Array *p;
p=(Array*)malloc(sizeof(Array)); //apply for a new node
p->element=inputElement; //valuation
p->nextElement=head->nextElement; //insert the new node to the head of the linkList
head->nextElement=p;
}
return head;
}
2.2 链表创建--从尾部插入
Array* LinkListCreateT()
{
Array *head =LinkListInit(); //apply for a head node
int inputElement;
Array *End=head;
printf("Please enter the first element of the sequence.\n");
while (scanf("%d",&inputElement)!=EOF && inputElement!=-1) {
Array *p;
p=(Array*)malloc(sizeof(Array)); //apply for a new node
p->element=inputElement; //valuation
End->nextElement=p; //insert the new node to the end of the linkList
End=p;
printf("Please enter the next element of the sequence.\n");
}
printf("Input finished.\n");
End->nextElement=NULL;
return head;
}
3. 打印链表
void printLinkList(Array* head)
{
Array* start;
printf("The sequence is:");
for(start=head->nextElement;start!=NULL;start=start->nextElement)
printf("%d ",start->element);
printf("\n");
}
4. 删除操作
Array* LinkListDelete(Array *head,int toDelete)
{
Array* p,* pre;
p=head->nextElement;
pre=head->nextElement;
while(p->element!=toDelete && p->nextElement!=NULL)
{
pre=p;
p=p->nextElement;
}
if(p==pre)
head=head->nextElement;
else
{
if(p==NULL)
pre->nextElement=NULL;
else
pre->nextElement=p->nextElement;
}
printf("Success to delate %d.\n",toDelete);
free(p);
return head;
}
(删除模块函数)
Array *delete(Array *head)
{
int target;
printf("please enter an element you want to delete.\n");
scanf("%d",&target);
return LinkListDelete(head,target);
}
5. 插入操作
Array *LinkListInsert(Array *head,int toInsert,int position)
{
int i=1;
Array* p,* pre;
p=head->nextElement;
pre=head->nextElement;
while(i!=position && p!=NULL)
{
pre=p;
p=p->nextElement;
i++;
}
Array* insert=(Array*)malloc(sizeof(Array));
insert->element=toInsert;
if(i!=1){
pre->nextElement=insert;
if (p!=NULL)
insert->nextElement=p;
else
insert->nextElement=NULL;
}
else{
head->nextElement=insert;
insert->nextElement=p;
}
printf("Success to insert %d in the %dth place.\n",toInsert,i);
return head;
}
(插入模块函数)
Array* Insert(Array* head)
{
int posi,insert;
printf("please enter the position you want to insert.\n");
scanf("%d",&posi);
printf("please enter the element you want to insert.\n");
scanf("%d",&insert);
return LinkListInsert(head, insert, posi);
运行截图
运行主函数
int main()
{
Array* arrayLinkList=LinkListCreateT();
printLinkList(arrayLinkList); //created
arrayLinkList=delete(arrayLinkList);
printLinkList(arrayLinkList); //deleted
arrayLinkList=Insert(arrayLinkList);
printLinkList(arrayLinkList); //inserted
}