qidao123.com技术社区-IT企服评测·应用市场

标题: 使用C语言实现简单的通用的链表 [打印本页]

作者: 刘俊凯    时间: 2023-6-7 18:59
标题: 使用C语言实现简单的通用的链表
在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据。下面提供了一种方法,可以将不同节点的数据链接起来。
下面的代码都是基础的C语言代码,涉及到的知识点基本覆盖到C语言学习的所有知识面,尤其是使用了宏,减少了重复的代码。
无论是C语言大佬还是C语言萌新,都可以食用此链表,理解起来可能很复杂,以下是源码,建议好好理解。
Main.c
  1. #include "stdafx.h"
  2. #include"Teacher.h"
  3. #include "Student.h"
  4. #include"MainCmd.h"
  5. int main()
  6. {
  7.     CALL_PROC(Main, MainCmd)
  8.     return 0;
  9. }
复制代码
Stdafx.h
  1. #pragma once
  2. #include<iostream>
  3. using namespace std;
复制代码
Teacher.h
  1. #pragma once
  2. #include"List.h"
  3. #include"CmdMap.h"
  4. DECLEAR_PROC(Teacher)
  5. struct TEACHER
  6. {
  7.     LINKER linker;
  8.     char szName[20];
  9.     char szAddr[20];
  10.     int nAge;
  11. };
  12. extern LINKER* g_pTeacher;
  13. LINKER* CreateTeacher();
  14. void InputTeacher(LINKER* pLink);
  15. void OutputTeacher(const LINKER* pLink);
  16. LINKER* FindTeacher(LINKER* pHead);
  17. void CreateTeacherList();
  18. void AddTeacher();
  19. void DeleteTeacher();
  20. void FindTeacherNode();
  21. void InsertTeacher();
  22. void ShowTeacherList();
  23. void ClearTeacherList();
复制代码
Teacher.cpp
[code]#include"Teacher.h"#include"Student.h"#include"stdafx.h"#include"CmdFun.h"FUN_TABLE g_TeacherTable = { CreateTeacher,&InputTeacher,&OutputTeacher,&FindTeacher };LINKER* CreateTeacher(){    char szName[12] = "";    cout > szName;    if (!strcmp(szName, "Student"))    {        STUDENT* pNew = new STUDENT;        if (NULL != pNew)        {            pNew->linker.pFunTab = &g_StudentTable;            pNew->linker.pNext = NULL;            pNew->linker.pPrev = NULL;        }        return (LINKER*)pNew;    }    if (!strcmp(szName, "Teacher"))    {        TEACHER* pNew = new TEACHER;        if (NULL != pNew)        {            pNew->linker.pFunTab = &g_TeacherTable;            pNew->linker.pNext = NULL;            pNew->linker.pPrev = NULL;        }        return (LINKER*)pNew;    }    return NULL;}void InputTeacher(LINKER* pLink){    TEACHER* pTemp = (TEACHER*)pLink;    cout > pTemp->szName;    cout > pTemp->szAddr;    cout > pTemp->nAge;}void OutputTeacher(const LINKER* pLink){    TEACHER* pTemp = (TEACHER*)pLink;    cout linker.pPrev = NULL;        }        return (LINKER*)pNew;    }    if (!strcmp(szName, "Teacher"))    {        TEACHER* pNew = new TEACHER;        if (NULL != pNew)        {            pNew->linker.pFunTab = &g_TeacherTable;            pNew->linker.pNext = NULL;            pNew->linker.pPrev = NULL;        }        return (LINKER*)pNew;    }    return NULL;}void InputStudent(LINKER* pLink){    STUDENT* pTemp = (STUDENT*)pLink;    cout > pTemp->szID;    cout > pTemp->chSex;    cout > pTemp->nGrade;}void OutputStudent(const LINKER* pLink){    STUDENT* pTemp = (STUDENT*)pLink;    cout




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4