在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据。下面提供了一种方法,可以将不同节点的数据链接起来。
下面的代码都是基础的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[20];
- char szAddr[20];
- 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
[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 |