link_list.h
#ifndef _link_list_h
#define _link_list_h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct abc{
int data;
struct abc *next;
}link_t;
void link_creat(link_t **phead);
void link_head_add(link_t *phead,int data);
void print_list(link_t *phead);
void insert_list_by_tail(link_t *phead, int data);
void insert_list_by_pos(link_t *phead, int pos, int data);
void delete_list_by_head(link_t *phead);
void delete_list_by_tail(link_t *phead);
void delete_list_by_pos(link_t *phead, int pos);
void search_list_by_pos(link_t *phead, int pos, int *num);
void modify_list_by_pos(link_t *phead, int pos, int new_data);
void clean_list(link_t *phead);
void destroy_list(link_t **p);
#endif
link_list.c
#include "link_list.h"
void link_creat(link_t **phead){
*phead=(link_t *)malloc(sizeof(link_t));
memset(*phead,0,sizeof(link_t));
}
void link_head_add(link_t *phead,int data){
link_t *pnew=NULL;
link_creat(&pnew);
pnew->next=phead->next;
phead->next=pnew;
pnew->data=data;
}
void print_list(link_t *phead){
link_t *p=phead->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
}
void insert_list_by_tail(link_t *phead, int data){
link_t *p=phead->next;
while(p->next!=NULL){
p=p->next;
}
link_t *pnew=NULL;
link_creat(&pnew);
p->next=pnew;
pnew->data=data;
pnew->next=NULL;
}
void insert_list_by_pos(link_t *phead, int pos, int data){
if(pos<0){
printf("插入位置不合理,插入失败\n");
}
if(0==pos){
link_head_add(phead,data);
return;
}
link_t *p=phead;
int i=0;
for(i=0;i<pos;i++){
p=p->next;
if(p==NULL){
printf("插入位置不合理,插入失败\n");
return;
}
}
link_t *pnew=NULL;
link_creat(&pnew);
pnew->next=p->next;
pnew->data=data;
p->next=pnew;
}
void delete_list_by_head(link_t *phead){
if(NULL == phead->next){
printf("表已空,删除失败\n");
return;
}
link_t *ptemp=phead->next;
phead->next=phead->next->next;
free(ptemp);
}
void delete_list_by_tail(link_t *phead){
if(NULL == phead->next){
printf("表已空,删除失败\n");
return;
}
link_t *p=phead;
while(p->next->next!=NULL){
p=p->next;
}
free(p->next);
p->next=NULL;
}
void delete_list_by_pos(link_t *phead, int pos){
if(pos<0){
printf("删除位置不合理,删除失败\n");
}
if(NULL == phead->next){
printf("表已空,删除失败\n");
return;
}
link_t *p=phead;
for(int i=0;i<pos;i++){
if(p->next==NULL){
printf("删除位置不合理\n");
return;
}
p=p->next;
}
link_t *ptmp=p->next->next;
free(p->next);
p->next=NULL;
p->next=ptmp;
}
void search_list_by_pos(link_t *phead, int pos, int *num){
if(pos<0){
printf("查询位置不合理,查询失败\n");
}
if(NULL == phead->next){
printf("表已空,查询失败\n");
return;
}
link_t *p=phead;
for(int i=0;i<pos;i++){
if(p->next->next==NULL){
printf("查询位置不合理\n");
*num=-1;
return;
}
p=p->next;
}
*num=p->next->data;
}
void modify_list_by_pos(link_t *phead, int pos, int new_data){
if(pos<0){
printf("修改位置不合理,修改失败\n");
}
if(NULL == phead->next){
printf("表已空,修改失败\n");
return;
}
link_t *p=phead;
for(int i=0;i<pos;i++){
if(p->next->next==NULL){
printf("修改位置不合理\n");
return;
}
p=p->next;
}
p->next->data=new_data;
}
void clean_list(link_t *phead){
while(phead->next!=NULL){
delete_list_by_head(phead);
}
}
void destroy_list(link_t **p){
clean_list(*p);
free(*p);
}
main.c
#include "link_list.h"
int main(int argc, char const *argv[]){
link_t *phead=NULL;
link_creat(&phead);
link_head_add(phead,5);
link_head_add(phead,1);
link_head_add(phead,4);
link_head_add(phead,2);
link_head_add(phead,3);
print_list(phead);//3 2 4 1 5
insert_list_by_tail(phead,6);
print_list(phead);//3 2 4 1 5 6
insert_list_by_tail(phead,6);
print_list(phead);//3 2 4 1 5 6 6
insert_list_by_pos(phead,6,7);
print_list(phead);//3 2 4 1 5 6 7 6
delete_list_by_head(phead);
delete_list_by_head(phead);
print_list(phead);//4 1 5 6 7 6
delete_list_by_tail(phead);
delete_list_by_tail(phead);
print_list(phead);//4 1 5 6
insert_list_by_tail(phead,2);
insert_list_by_tail(phead,3);
insert_list_by_tail(phead,1);
print_list(phead);//4 1 5 6 2 3 1
delete_list_by_pos(phead,3);
delete_list_by_pos(phead,3);
print_list(phead);//4 1 5 3 1
int num=0;
search_list_by_pos(phead,2,&num);
printf("%d\n",num);//5
modify_list_by_pos(phead,2,2);
print_list(phead);//4 1 2 3 1
clean_list(phead);
print_list(phead);//空
//destroy_list(&phead);
free(phead);
return 0;
}