main.c
#include"linklist.h"
void test()
{
//linklist ps=list_create();
linklist ps=NULL;
data_t value;
printf("Please input\n");
while(1)
{
scanf("%d",&value);
link_push_back(&ps,value);
//link_push_front(&ps,value);
if(getchar()=='\n')
break;
}
//单链表的位置插入
//link_push_pos(&ps,4,99);
//单链表的位置删除
//link_pop_pos(&ps,4);
/*
link_pop_front(&ps);
link_pop_front(&ps);
link_pop_back(&ps);
link_pop_back(&ps);
//单链表的位置插入
link_push_pos(ps,4,99);
//单链表的位置删除
link_pop_pos(ps,4);
*/
//单链表的位置修改
//link_change_pos(ps,1,88);
//单链表的位置查找
//printf("find_num=%d\n",link_seek_pos(ps,4));
link_show(ps);
}
int main(int argc, const char *argv[])
{
test();
return 0;
}
linklist.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int data_t;
typedef struct node
{
data_t val;
struct node* next;
}node_t,*linklist;
//单链表的创建
linklist list_create();
//单链表的遍历
int link_show(linklist H);
//单链表长度
int link_lenth(linklist H);
//单链表的后插
int link_push_back(linklist* PH,data_t value);
//单链表的前插
int link_push_front(linklist* PH,data_t value);
//单链表的后删
int link_pop_back(linklist* PH);
//单链表的前删
int link_pop_front(linklist* PH);
//单链表的位置插入
int link_push_pos(linklist* PH,int pos,data_t value);
//单链表的位置删除
int link_pop_pos(linklist* PH,int pos);
//单链表的位置修改
int link_change_pos(linklist H,int pos,data_t value);
//单链表的位置查找
int link_seek_pos(linklist H,int pos);
#endif
linklist.h
#include"linklist.h"
//单链表节点的创建
linklist list_create()
{
linklist H=(linklist)malloc(sizeof(node_t));
if(NULL==H)
{
printf("H malloc fail\n");
return NULL;
}
H->next=NULL;
H->val=0;
return H;
}
//单链表的前插
int link_push_front(linklist* PH,data_t value)
{
//newsnode
linklist newsnode=list_create();
if(NULL==*PH)
{
*PH=newsnode;
newsnode->val=value;
return 0;
}
//push
newsnode->next=(*PH)->next;
(*PH)->next=newsnode;
newsnode->val=(*PH)->val;
(*PH)->val=value;
return 0;
}
//单链表的遍历
int link_show(linklist H)
{
if(H==NULL)
return -1;
linklist p=H;
printf("show :");
while(p)
{
printf("%d ",p->val);
p=p->next;
}
puts("");
return 0;
}
//单链表长度
int link_lenth(linklist H)
{
if(NULL==H)
return -1;
linklist p=H;
int len=0;
while(p)
{
len++;
p=p->next;
}
return len;
}
//单链表的后插
int link_push_back(linklist* PH,data_t value)
{
linklist newsnode=list_create();
if(*PH==NULL)
{
*PH=newsnode;
newsnode->val=value;
return 0;
}
//find final
linklist p=*PH;
while(p->next)
p=p->next;
//push
p->next=newsnode;
newsnode->val=value;
return 0;
}
//单链表的后删
int link_pop_back(linklist* PH)
{
if(NULL==*PH||NULL==(*PH)->next)
{
free(*PH);
*PH=NULL;
return -1;
}
linklist p=*PH;
while(p->next->next)
p=p->next;
linklist del=p->next;
p->next=NULL;
free(del);
del=NULL;
return 0;
}
//单链表的前删
int link_pop_front(linklist* PH)
{
if(NULL==*PH||NULL==(*PH)->next)
{
free(*PH);
*PH=NULL;
return -1;
}
linklist p=*PH;
p->val=p->next->val;
linklist del=p->next;
p->next=p->next->next;
free(del);
del=NULL;
return 0;
}
//单链表的位置插入
int link_push_pos(linklist* PH,int pos,data_t value)
{
int len=link_lenth(*PH);
if(pos<1||pos>len+1)
{
printf("error\n");
return -1;
}
if(pos==1)
{
link_push_front(PH,value);
return 0;
}
//newsnode
linklist newsnode=list_create();
newsnode->val=value;
linklist p=*PH;
for(int i=1;i<pos-1;i++)
{
p=p->next;
}
newsnode->next=p->next;
p->next=newsnode;
return 0;
}
//单链表的位置删除
int link_pop_pos(linklist* PH,int pos)
{
int len=link_lenth(*PH);
if(pos<1||pos>len)
{
printf("error\n");
return -1;
}
if(pos==1)
{
link_pop_front(PH);
}
linklist p=*PH;
for(int i=1;i<pos-1;i++)
{
p=p->next;
}
linklist del=p->next;
p->next=del->next;
free(del);
del=NULL;
return 0;
}
//单链表的位置修改
int link_change_pos(linklist H,int pos,data_t value)
{
int len=link_lenth(H);
if(pos<1||pos>len)
{
printf("error\n");
return -1;
}
linklist p=H;
for(int i=1;i<pos;i++)
{
p=p->next;
}
p->val=value;
return 0;
}
//单链表的位置查找
int link_seek_pos(linklist H,int pos)
{
int len=link_lenth(H);
if(pos<1||pos>len)
{
printf("error\n");
return -1;
}
linklist p=H;
for(int i=1;i<pos;i++)
{
p=p->next;
}
return p->val;
}
x-mind