线性链表

来源:互联网 发布:初中英语词汇软件 编辑:程序博客网 时间:2024/05/21 01:25
                线性链表                LinkList.c
#define   _CRT_SECURE_NO_WARNINGS#include<iostream>#include "stdlib.h"#include "stdio.h"#include "string.h"#include "LinkList.h"using namespace std;typedef struct _tag_LinkList{    LinkListNode pHead;    int length;}TLinkList;LinkList* LinkList_Create(){    int ret = 0;    TLinkList *tem = NULL;    tem = (TLinkList*)malloc(sizeof(TLinkList));//分配内存    {        if (tem==NULL)        {            ret = -1;            printf("func (TLinkList*)malloc(sizeof(TLinkList)) err %d\n", ret);        }    }    memset(tem, 0, sizeof(TLinkList));    tem->pHead.next = NULL;    tem->length = 0;    return tem;}void LinkList_Destroy(LinkList* list){    TLinkList *ptem = NULL;    if (list==NULL)    {        return;    }    ptem = (TLinkList*)list;//上层应用传下来的指针,转化成TLinkList指针    if (list!=NULL)    {        free(ptem);    }    list = ptem=NULL;    return ;}void LinkList_Clear(LinkList* list){    TLinkList*pTem = NULL;    if (list==NULL)    {        printf("LinkList_Clear() err\n");        return;    }    pTem = (TLinkList*)list;    pTem->length = 0;    pTem->pHead.next = NULL;    list = pTem;    return ;}int LinkList_Length(LinkList* list){    TLinkList*pTem = NULL;    if (list == NULL)    {        printf("LinkList_Length() err\n");        return 0;    }    pTem = (TLinkList*)list;    return pTem->length;}int LinkList_Insert(LinkList* list, LinkListNode* node, int pos){    int ret = 0;    LinkListNode *pCurrent = NULL;//    TLinkList*pTem = NULL;    if (list == NULL||node==NULL||pos<0)    {        ret = -1;        printf("LinkList_Insert() err %d\n ",ret);        return ret;    }    pTem = (TLinkList*)list;    pCurrent = &pTem->pHead;    for (int i = 0; (i<pos) && pCurrent->next != NULL; i++)//寻找要插入的位置    {        pCurrent = pCurrent->next;  //往后移动    }    //开始插入节点    node->next = pCurrent->next; //要插入的节点链接插入点的后一节点    pCurrent->next = node;//前面链接前一节点    pTem->length++;    return 0;}LinkListNode* LinkList_Get(LinkList* list, int pos){    LinkListNode*ret = NULL;    LinkListNode *pCurrent = NULL;//    TLinkList*pTem = NULL;    if (list == NULL || pos < 0)    {        printf("LinkList_Insert() err \n ");        return NULL;    }    pTem = (TLinkList*)list;    pCurrent = &pTem->pHead;    for (int i = 0; (i < pos) && pCurrent->next != NULL; i++)    {        pCurrent = pCurrent->next; //让pCurrent往后移动     }    ret = pCurrent->next;    return ret;}LinkListNode* LinkList_Delete(LinkList* list, int pos){    LinkListNode*ret = NULL;    LinkListNode *pCurrent = NULL;//    TLinkList*pTem = NULL;    pTem = (TLinkList*)list;    if (list == NULL || pos < 0||pos>=pTem->length)    {        printf("LinkList_Insert() err \n ");        return NULL;    }    pCurrent = &pTem->pHead;    for (int i = 0; i < pos; i++)    {        pCurrent = pCurrent->next;  //让pCurrent往后移动    }    ret = pCurrent->next;//缓存要删除节点的位置    pCurrent->next = pCurrent->next->next;//核心代码    pTem->length--;    return ret;}
LinkList.c#define   _CRT_SECURE_NO_WARNINGS#pragma  once#ifndef _MYLINKLIST_H_#define _MYLINKLIST_H_#include <iostream>using namespace std;typedef void LinkList;typedef struct _tag_LinkListNode{    struct _tag_LinkListNode* next;}LinkListNode;LinkList*     LinkList_Create();//创建链表void          LinkList_Destroy(LinkList* list);//销毁链表void          LinkList_Clear(LinkList* list);//清除int           LinkList_Length(LinkList* list);//求长度int           LinkList_Insert(LinkList* list, LinkListNode* node, int pos);//插入LinkListNode* LinkList_Get(LinkList* list, int pos);//获取LinkListNode* LinkList_Delete(LinkList* list, int pos);//删除#endif

main.c

#define  _CRT_SECURE_NO_WARNINGS#include <iostream>#include "LinkList.h"#include <string.h>using namespace std;struct Student{    LinkListNode node;  //Linux内核原理:业务结点中有链表结点    char name[128];    int age;};void print_LinkList(void* list)  //遍历打印链表{    for (int i = 0; i < LinkList_Length(list); i++)    {        struct Student *tmp = (struct Student*)LinkList_Get(list, i);        printf("name: %s , age: %d\n", tmp->name, tmp->age);    }}int main(){    Student s1;      Student s2;      Student s3;      Student s4;    strcpy(s1.name, "xiaoli");  s1.age = 20;    strcpy(s2.name, "Mingming");  s2.age = 23;    strcpy(s3.name, "Meimei");  s3.age = 22;    strcpy(s4.name, "Me");  s4.age = 25;    LinkList* list = list = LinkList_Create();    /************************************************************************/    //case1:    LinkList_Insert(list, &s1.node, 0); //把s1中的链表结点s1.node结点插入到链表list    LinkList_Insert(list, &s2.node, 0); //把s2中的链表结点s2.node结点插入到链表list    LinkList_Insert(list, &s3.node, 0); //把s3中的链表结点s3.node结点插入到链表list    LinkList_Insert(list,(LinkListNode*)(&s4.node),1);    print_LinkList(list);    cout << "删除结点" << endl;    LinkList_Delete(list, 1);    cout << "删除结点之后" << endl;    print_LinkList(list);    system("pause");    return 0;}/*void main(){    int array[15];    for (int i = 0; i < 15;i++)    {        array[i] = i;    }    for (int i = 0; i < 10; i++)    {        cout << array[i]<<" ";    }    system("pause");}*/
原创粉丝点击