设为首页 加入收藏

TOP

C语言学习之单向链表操作
2015-02-13 18:23:34 来源: 作者: 【 】 浏览:22
Tags:语言学 习之 单向 操作

该文件为单向链表操作的一些接口:(如发现有错误的地方,及时告知,不胜感激!)


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;
}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Qt Webkit初学例子(附代码) 下一篇C语言学习之用链表实现通讯录

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: