线性链表
来源:互联网 发布:初中英语词汇软件 编辑:程序博客网 时间: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");}*/
阅读全文
0 0
- 链表线性表
- 数据结构-线性链表
- 线性链表逆转
- 线性链表---数据结构
- 单线性链表
- 链表-线性链表
- 线性链表
- 线性链表
- 线性链表(代码)
- 数据结构 线性链表
- 线性链表
- 线性链表合并
- 2.2 线性链表
- C++线性链表
- 线性链表C
- 数据结构--线性链表
- 线性链表
- 线性链表
- 数据结构-二叉树的基本操作
- Maven搭建SSM框架
- 斧钺智能推出两款无人机,二次发力专业级市场
- 6.1(2)
- CC2530中的MAC层确认帧(兼容IEEE 802.15.4-2006)
- 线性链表
- maximal-rectangle Java code
- 6.1(1)
- 全卷积神经网络 图像语义分割实验:FCN数据集制作,网络模型定义,网络训练(提供数据集和模型文件,以供参考)
- Linux之CentOS-7安装步骤总结
- wxWidget教程(9)——网络编程HTTP与SOCKET
- java–流已经启动或关闭
- linux各个版本发行图
- opencv(c++)图像操作