该文件为单向链表操作的一些接口:(如发现有错误的地方,及时告知,不胜感激!)
list.h?
#ifndef? _CHAINLIST_H_
#define? _CHAINLIST_H_
typedef struct
{
? ? char key[15];
? ? char name[20];
? ? int age;
}DATATYPE_T;
typedef struct Node
{
? ? DATATYPE_T? data;
? ? struct Node *next;
}chainListType;
/* 添加节点到链表末尾 */
chainListType *chainlist_add_end(chainListType *head,DATATYPE_T data);
/* 添加节点到链表首部 */
chainListType *chainlist_add_first(chainListType *head,DATATYPE_T data);
/* 按关键字在链表中查找内容 */
chainListType *chainlist_find(chainListType *head,char *key);
/* 插入节点到链表指定位置 */
chainListType *chainlist_insert(chainListType *head,char *findkey,DATATYPE_T data);
/* 删除指定关键字的节点 */
chainListType *chainlist_delete(chainListType *head,char *key);
/*获取链表的节点数量 */
int chainlist_length(chainListType *head);
#endif
?
?
list.c文件如下:
#include
#include
#include
#include "chainlist.h"
chainListType *chainlist_add_end(chainListType *head,DATATYPE_T data)
{
? ? chainListType *node,*phead;
? ? node = malloc(sizeof(chainListType));
? ? if(NULL == node)
? ? {
? ? ? ? printf("malloc failed\n");
? ? ? ? return NULL;
? ? }
? ? node->data = data;
? ? node->next = NULL;
? ? if(head ==NULL)
? ? {
? ? ? ? head = node;
? ? ? ? return head;
? ? }
? ? phead = head;
? ?
? ? while(phead->next != NULL)
? ? {
? ? ? ? phead = phead->next;
? ? }
? ? phead->next = node;
? ? return head;
}
chainListType *chainlist_add_first(chainListType *head,DATATYPE_T data)
{
? ? chainListType *node;
? ? node = malloc(sizeof(chainListType));
? ? if(NULL == node)
? ? {
? ? ? ? printf("malloc failed\n");
? ? ? ? return NULL;
? ? }
? ? node->data = data;
? ? node->next = head;
? ? head = node;
? ? return head;
}
chainListType *chainlist_find(chainListType *head,char *key)
{
? ? chainListType *phead;
? ? phead = head;
? ?
? ? while(phead)
? ? {
? ? ? ? if(strcmp(phead->data.key,key)==0)
? ? ? ? {
? ? ? ? ? ? return phead;
? ? ? ? }
? ? ? ? phead = phead->next;
? ? }
? ? return NULL;
}
chainListType *chainlist_insert(chainListType *head,char *findkey,DATATYPE_T data)
{
? ? chainListType *node,*node1;
? ?
? ? node = malloc(sizeof(chainListType));
? ? if(NULL == node)
? ? {
? ? ? ? printf("malloc failed\n");
? ? ? ? return NULL;
? ? }
? ? node->data = data;
? ? node1 = chainlist_find(head,findkey);? ?
? ? if(node1)
? ? {
? ? ? ? node1->next = node->next;
? ? ? ? node1->next = node;
? ? }
? ? else
? ? {
? ? ? ? free(node);
? ? ? ? printf("can't find key\n");
? ? }
? ? return head;
}
chainListType *chainlist_delete(chainListType *head,char *key)
{
? ? chainListType *node,*phead;
? ? node = head;
? ? phead = head;
? ?
? ? while(phead)
? ? {
? ? ? ? if(strcmp(head->data.key,key)==0)
? ? ? ? {
? ? ? ? ? ? node = head->next;
? ? ? ? ? ? free(head);
? ? ? ? ? ? head = NULL;
? ? ? ? ? ? head = node;
? ? ? ? ? ? if(head!=NULL)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return head;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? return NULL;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if(strcmp(phead->data.key,key)==0)
? ? ? ? {
? ? ? ? ? ? node->next = phead->next;
? ? ? ? ? ? free(phead);
? ? ? ? ? ? phead = NULL;
? ? ? ? ? ? return head;
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? node = phead;
? ? ? ? ? ? phead = phead->next;
? ? ? ? }
? ? }
? ? return NULL;
}
int chainlist_length(chainListType *head)
{
? ? int length = 0;
? ? chainListType *phead;
? ? phead = head;
? ? while(phead)
? ? {
? ? ? ? phead = phead->next;
? ? ? ? length++;
? ? }
? ? return length;
}