1、头文件
#ifndef _LINKEDLIST_H
#define _LINKEDLIST_H
typedef int data_t;
typedef struct linklist
{
data_t data;
struct linklist* next;
}lk_node, *lk_pnode;
lk_pnode create(void);
int len_linklist(lk_pnode H);
int insert_linklist(lk_pnode H,int location,data_t data);
int del_linklist(lk_pnode H,int location);
int delall_linklist(lk_pnode);
int cover_linklist(lk_pnode,int location,data_t data);
int locquery_linklist(lk_pnode H,int location);
int destory_linklist(lk_pnode* H);
void show_linklist(lk_pnode H);
int updown_linklist(lk_pnode H);
int valquery_linklist(lk_pnode H,data_t data);
int sort_linklist(lk_pnode H);
#endif
2、函数.C文件
#include <stdio.h>
#include "linkedlist.h"
#include <stdlib.h>
//创建---------------------------------------------------
lk_pnode create(void)
{
lk_pnode temp = (lk_pnode)malloc(sizeof(lk_node));
if( NULL==temp )
return NULL;
temp->next = NULL;
return temp;
}
//覆盖--------------------------------------------------
int cover_linklist(lk_pnode H,int location,data_t data)
{
if( NULL == H)
return -1;
if( location<0 || location>len_linklist(H) )
return -2;
while(location)
{
H = H->next;
location--;
}
H->next->data = data;
return 0;
}
//求链表长度---------------------------------------------------
int len_linklist(lk_pnode H)
{
if( NULL == H )
return -1;
int len = 0;
while( H->next != NULL )
{
H = H->next;
len++;
}
return len;
}
//删除---------------------------------------------------
int del_linklist(lk_pnode H,int location)
{
if(NULL == H)
return -1;
if(location < 0 || location > len_linklist(H))
return -2;
while(location)
{
H=H->next;
location--;
}
lk_pnode b = H->next;
H->next = H->next->next;
free(b);
return 0;
}
//清空----------------------------------------------------
int delall_linklist(lk_pnode H)
{
if(NULL==H)
return -1;
if(0 == len_linklist(H))
return -2;
while(H->next != NULL)
{
lk_pnode temp = H->next;
H->next = temp->next;
free(temp);
}
return 0;
}
//插入----------------------------------------------------
int insert_linklist(lk_pnode H,int location,data_t data)
{
if( NULL == H )
return -1;
if( location < 0 || location > len_linklist(H) )
return -2;
while( location-- ) // location-1 ?
H = H->next;
lk_pnode temp = (lk_pnode)malloc(sizeof(lk_node));
temp->next = H->next;
H->next = temp;
temp->data = data;
return 0;
}
//按位查询---------------------------------------------------
int locquery_linklist(lk_pnode H,int location)
{
if(NULL==H)
return -1;
if(location<0 || location> len_linklist(H))
return -2;
while(location)
{
H=H->next;
location--;
}
return H->next->data;
}
//销毁----------------------------------------------------
int destory_linklist(lk_pnode* H)
{
if(NULL == H)
return 0;
free(*H);
return 0;
}
//罗列-----------------------------------------------------
void show_linklist(lk_pnode H)
{
while(H->next != NULL)
{
H=H->next;
printf("%d ",H->data);
}
puts("");
}
//颠倒-----------------------------------------------------
int updown_linklist(lk_pnode H)
{
if(NULL==H)
return -1;
if(0 == len_linklist(H))
return -2;
lk_pnode E = H->next;
H->next=NULL;
while(E)
{
lk_pnode B = E;
E=E->next;
B->next=H->next;
H->next=B;
}
return 0;
}
//查找数据--------------------------------------------------------
int valquery_linklist(lk_pnode H,data_t data)
{
if(NULL==H)
return -1;
int scor = 0;
int dex = 0;
while(H->next != NULL)
{
H=H->next;
if(H->data == data)
{
scor++;
printf("下标%d的值为%d\n",dex,data);
}
dex++;
}
if( 0 == scor )
return -2;
return 0;
}
//排序,从小到大----------------------------------------------------------
int sort_linklist(lk_pnode H)
{
if(NULL==H)
return -1;
if(0 == len_linklist(H))
return -2;
lk_pnode B = H->next;
lk_pnode E = B;
lk_pnode temp = H;
H->next = NULL;
while(B)
{
E = B;
B = B->next;
temp = H;
while(temp->next)
{
if(temp->next->data > E->data)
break;
temp = temp->next;
}
E->next = temp->next;
temp->next = E;
}
return 0;
}