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

打印 上一主题 下一主题

主题 913|帖子 913|积分 2743

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

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表