使用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]