刘俊凯 发表于 2023-6-7 18:59:10

使用C语言实现简单的通用的链表

在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据。下面提供了一种方法,可以将不同节点的数据链接起来。
下面的代码都是基础的C语言代码,涉及到的知识点基本覆盖到C语言学习的所有知识面,尤其是使用了宏,减少了重复的代码。
无论是C语言大佬还是C语言萌新,都可以食用此链表,理解起来可能很复杂,以下是源码,建议好好理解。
Main.c
#include "stdafx.h"
#include"Teacher.h"
#include "Student.h"
#include"MainCmd.h"

int main()
{
    CALL_PROC(Main, MainCmd)

    return 0;
}Stdafx.h
#pragma once
#include<iostream>
using namespace std;Teacher.h
#pragma once
#include"List.h"
#include"CmdMap.h"

DECLEAR_PROC(Teacher)

struct TEACHER
{
    LINKER linker;

    char szName;
    char szAddr;
    int nAge;
};

extern LINKER* g_pTeacher;

LINKER* CreateTeacher();
void InputTeacher(LINKER* pLink);
void OutputTeacher(const LINKER* pLink);
LINKER* FindTeacher(LINKER* pHead);

void CreateTeacherList();
void AddTeacher();
void DeleteTeacher();
void FindTeacherNode();
void InsertTeacher();
void ShowTeacherList();
void ClearTeacherList();Teacher.cpp
#include"Teacher.h"#include"Student.h"#include"stdafx.h"#include"CmdFun.h"FUN_TABLE g_TeacherTable = { CreateTeacher,&InputTeacher,&OutputTeacher,&FindTeacher };LINKER* CreateTeacher(){    char szName = "";    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
页: [1]
查看完整版本: 使用C语言实现简单的通用的链表