目录
主函数
#include <stdio.h>
#include <stdlib.h>
#define MALLOC_OK 1
#define MALLOC_NO 0
#define CREATE_OK 1
#define CREATE_NO 0
struct node //创建结构体
{
int num; //数据域
struct Node * next; //指针域
};
typedef struct node Node;
typedef Node *Link;
//主函数
int main()
{
int i;
int loc;
int num;
Link head=NULL;
Link new_node=NULL;
create_link(&head);
for(i=0;i<10;i++)
{
if(CREATE_OK == create_node(&new_node))
{
new_node->num = i+1;
// insert_node_head(&head,new_node);
insert_node_tail(&head,new_node);
}
}
printf("old link:\n");
display_link(head);
/* printf("Please input location:");
scanf("%d",&loc);
if(CREATE_OK == create_node(&new_node))
{
printf("please input num:");
scanf("%d",&new_node->num);
insert_node_mid_before(&head,new_node,loc);
insert_node_mid_after(&head,new_node,loc);
}
*/
printf("please input the num you want to delete:\n");
scanf("%d",&num);
delete_node(&head,num);
printf("The link which was deleted:\n");
display_link(head);
release_link(&head);
display_link(head);
return 0;
}
创建链表
//创建链表(分配内存,创建结点)
void create_link(Link *head)
{
*head=NULL;
}
int is_malloc_ok(Link new_node)
{
if(NULL == new_node)
{
printf("malloc error!\n");
return MALLOC_NO;
}
return MALLOC_OK;
}
int create_node(Link *new_node)
{
*new_node=(Link)malloc(sizeof(*new_node));
if(MALLOC_OK == is_malloc_ok(*new_node))
{
return CREATE_OK;
}
return CREATE_NO;
}
增
//头插
void insert_node_head(Link *head,Link new_node)
{
new_node->next = *head;
*head=new_node;
}
//尾插
void insert_node_tail(Link *head,Link new_node)
{
Link p=NULL;
p=*head;
if(*head==NULL)
{
*head=new_node;
new_node->next=NULL;
}
else
{
while(p->next != NULL)
{
p=p->next;
}
p->next=new_node;
new_node->next=NULL;
}
}
//前插
void insert_node_mid_before(Link *head,Link new_node,int loc)
{
Link p=NULL;
Link q=NULL;
p=q=*head;
while(p != NULL && p->num != loc)
{
q=p;
p=p->next;
}
if(p==*head)
{
new_node->next=*head;
*head=new_node;
}
else
{
q->next=new_node;
new_node->next=p;
}
}
//后插
void insert_node_mid_after(Link *head,Link new_node,int loc)
{
Link p=*head;
if(NULL ==*head)
{
*head=new_node;
new_node->next=NULL;
}
else
{
while(p->next!=NULL && p->num != loc)
{
p=p->next;
}
new_node->next=p->next;
p->next=new_node;
}
}
删
//删除
void delete_node(Link *head,int num)
{
Link p=NULL;
Link q=NULL;
p=q=*head;
if(*head==NULL)
{
printf("The link is empty,there is no node to delete.\n");
}
else
{
while(p != NULL && p->num != num)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("don't find the node which need to delete.\n");
}
else if(p==*head)
{
*head=p->next;
free(p);
}
else
{
q->next=p->next;
free(p);
}
}
}
//释放内存
void release_link(Link *head)
{
Link p=NULL;
p=*head;
while(*head != NULL)
{
*head=(*head)->next;
free(p);
p=*head;
}
}
改
查
//遍历
void display_link(Link head)
{
Link p=NULL;
p=head;
if(NULL == head)
{
printf("The link is empty!\n");
return;
}
while(p != NULL)
{
printf("%d\n",p->num);
p=p->next;
}
printf("\n");
}
完整代码
#include <stdio.h>
#include <stdlib.h>
#define MALLOC_OK 1
#define MALLOC_NO 0
#define CREATE_OK 1
#define CREATE_NO 0
struct node //创建结构体
{
int num; //数据域
struct Node * next; //指针域
};
typedef struct node Node;
typedef Node *Link;
//创建链表(分配内存,创建结点)
void create_link(Link *head)
{
*head=NULL;
}
int is_malloc_ok(Link new_node)
{
if(NULL == new_node)
{
printf("malloc error!\n");
return MALLOC_NO;
}
return MALLOC_OK;
}
int create_node(Link *new_node)
{
*new_node=(Link)malloc(sizeof(*new_node));
if(MALLOC_OK == is_malloc_ok(*new_node))
{
return CREATE_OK;
}
return CREATE_NO;
}
//头插
void insert_node_head(Link *head,Link new_node)
{
new_node->next = *head;
*head=new_node;
}
//尾插
void insert_node_tail(Link *head,Link new_node)
{
Link p=NULL;
p=*head;
if(*head==NULL)
{
*head=new_node;
new_node->next=NULL;
}
else
{
while(p->next != NULL)
{
p=p->next;
}
p->next=new_node;
new_node->next=NULL;
}
}
//前插
void insert_node_mid_before(Link *head,Link new_node,int loc)
{
Link p=NULL;
Link q=NULL;
p=q=*head;
while(p != NULL && p->num != loc)
{
q=p;
p=p->next;
}
if(p==*head)
{
new_node->next=*head;
*head=new_node;
}
else
{
q->next=new_node;
new_node->next=p;
}
}
//后插
void insert_node_mid_after(Link *head,Link new_node,int loc)
{
Link p=*head;
if(NULL ==*head)
{
*head=new_node;
new_node->next=NULL;
}
else
{
while(p->next!=NULL && p->num != loc)
{
p=p->next;
}
new_node->next=p->next;
p->next=new_node;
}
}
//删除
void delete_node(Link *head,int num)
{
Link p=NULL;
Link q=NULL;
p=q=*head;
if(*head==NULL)
{
printf("The link is empty,there is no node to delete.\n");
}
else
{
while(p != NULL && p->num != num)
{
q=p;
p=p->next;
}
if(p==NULL)
{
printf("don't find the node which need to delete.\n");
}
else if(p==*head)
{
*head=p->next;
free(p);
}
else
{
q->next=p->next;
free(p);
}
}
}
//遍历
void display_link(Link head)
{
Link p=NULL;
p=head;
if(NULL == head)
{
printf("The link is empty!\n");
return;
}
while(p != NULL)
{
printf("%d\n",p->num);
p=p->next;
}
printf("\n");
}
//释放内存
void release_link(Link *head)
{
Link p=NULL;
p=*head;
while(*head != NULL)
{
*head=(*head)->next;
free(p);
p=*head;
}
}
//主函数
int main()
{
int i;
int loc;
int num;
Link head=NULL;
Link new_node=NULL;
create_link(&head);
for(i=0;i<10;i++)
{
if(CREATE_OK == create_node(&new_node))
{
new_node->num = i+1;
// insert_node_head(&head,new_node);
insert_node_tail(&head,new_node);
}
}
printf("old link:\n");
display_link(head);
/* printf("Please input location:");
scanf("%d",&loc);
if(CREATE_OK == create_node(&new_node))
{
printf("please input num:");
scanf("%d",&new_node->num);
insert_node_mid_before(&head,new_node,loc);
insert_node_mid_after(&head,new_node,loc);
}
*/
printf("please input the num you want to delete:\n");
scanf("%d",&num);
delete_node(&head,num);
printf("The link which was deleted:\n");
display_link(head);
release_link(&head);
display_link(head);
return 0;
}