头插法核心代码:
q->data = e;
q->next = p->next;
p->next = q;
尾插法核心代码:
q->data = e;
q->next = NULL;
p->next = q;
主函数代码:
#include "LinkList.h"
#include <stdio.h>
#include <stdlib.h>
void print(ElemType e)
{
printf("%d ", e);
}
int FirstInsert(Node *l, ElemType e)
{
Node *p = l;
if(NULL == l)
{
return FAILURE;
}
if(NULL == p)
{
return FAILURE;
}
Node *q = (Node *)malloc(sizeof(Node) * 1);
if(NULL == q)
{
return FAILURE;
}
q->data = e;
q->next = p->next;
p->next = q;
return SUCCESS;
}
int FinalInsert(Node *l, ElemType e)
{
Node *p = l;
if(NULL == l)
{
return FAILURE;
}
while(p->next != NULL)
{
p = p->next;
}
if(p == NULL)
{
return FAILURE;
}
Node *q = (Node *)malloc(sizeof(Node) * 1);
if(NULL == q)
{
return FAILURE;
}
q->data = e;
q->next = NULL;
p->next = q;
return SUCCESS;
}
int main()
{
Node *first = NULL;
int i, ret, num;
srand(time(NULL));
if(LinkInit(&first) == FAILURE)
{
printf("Init Failure!\n");
}
/*头插*/
for(i = 0; i < 8; i++)
{
scanf("%d", &num);
FirstInsert(first, num);
if(ret == FAILURE)
{
printf("Insert Failure!\n");
}
else
{
printf("Insert Success!\n");
}
}
/*遍历*/
ret = LinkTraverse(first, print);
if(ret == FAILURE)
{
printf("\nTraverse Failure!\n");
}
else
{
printf("\nTraverse Success!\n");
}
/*清空*/
ret = LinkClear(first);
if(ret == SUCCESS)
{
printf("Clear Success!\n");
}
else
{
printf("Clear Failure!\n");
}
/*尾插*/
for(i = 0; i < 10; i++)
{
scanf("%d", &num);
FinalInsert(first, num);
if(ret == FAILURE)
{
printf("Insert Failure!\n");
}
else
{
printf("Insert Success!\n");
}
}
/*遍历*/
ret = LinkTraverse(first, print);
if(ret == FAILURE)
{
printf("\nTraverse Failure!\n");
}
else
{
printf("\nTraverse Success!\n");
}
/*清空*/
ret = LinkClear(first);
if(ret == SUCCESS)
{
printf("Clear Success!\n");
}
else
{
printf("Clear Failure!\n");
}
return 0;
}
初始化, 清空和遍历调用文章《数据结构单链表》中的LinkList.c代码, 头文件调用文章《数据结构 单链表》中的LinkList.h