赞
踩
首先创建一个头文件存放所需要的函数功能的声明slist.h
#ifndef _SLIST_H #define _SLIST_H #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <malloc.h> typedef int SLTDataType; typedef struct SListNode{ SLTDataType _data; struct SListNode* _next; }SListNode; typedef struct SList{ SListNode* _head; }SList; //初始化函数 void SListInit(SList* plist); //释放开辟的动态内存,销毁函数 void SListDestory(SList* plist); //头插 void SListPushFront(SList* plist, SLTDataType x); //头删 void SListPopFront(SList* plist); //查找对应数据的链表 SListNode* SListFind(SList* plist, SLTDataType x); //在pos位置后面进行插入 void SListInsertAfter(SListNode* pos, SLTDataType x); //在pos位置后面进行删除 void SListEraseAfter(SListNode* pos); //打印函数 void SListPrint(SList* plist); #endif //_SLIST_H
创建一个源文件slist.c来写函数功能
#include "slist.h" //初始化函数 void SListInit(SList* plist) { assert(plist); plist->_head = NULL; } //销毁,释放动态内存 void SListDestory(SList* plist) { SListNode * tmp; while (plist->_head) { tmp = plist->_head; plist->_head = plist->_head->_next; free(tmp); } } //头插 void SListPushFront(SList* plist, SLTDataType x) { assert(plist); SListNode * cur = (SListNode *)malloc(sizeof(SListNode)); cur->_data = x; cur->_next = plist->_head; plist->_head = cur; } //头删 void SListPopFront(SList* plist) { assert(plist); SListNode * tmp; if (plist->_head) { tmp = plist->_head; plist->_head = plist->_head->_next; free(tmp); } } //打印函数 void SListPrint(SList* plist) { assert(plist); SListNode * cur; for (cur = plist->_head; cur; cur = cur->_next) { printf("%d->", cur->_data); } printf("NULL\n"); } //查找某个数据对应的节点 SListNode* SListFind(SList* plist, SLTDataType x) { assert(plist); SListNode * cur; for (cur = plist->_head; cur; cur = cur->_next) { if (cur->_data == x) { return cur; } } return NULL; } //前插示范 void SListInsertFront(SList* plist, SLTDataType x, SLTDataType src) { assert(plist); SListNode * cur; SListNode * newdata = (SListNode *)malloc(sizeof(SListNode)); if (plist->_head->_data == x) { SListPushFront(plist, src); return; } for (cur = plist->_head; cur->_next; cur = cur->_next) { if (cur->_next->_data == x) { break; } } newdata->_data = src; newdata->_next = cur->_next; cur->_next = newdata; } //在pos位置后面进行插入 void SListInsertAfter(SListNode* pos, SLTDataType x) { assert(pos); SListNode * cur = (SListNode *)malloc(sizeof(SListNode)); cur->_data = x; cur->_next = pos->_next; pos->_next = cur; } //在pos位置后面进行删除 void SListEraseAfter(SListNode* pos) { assert(pos); SListNode * tmp = pos->_next; pos->_next = tmp->_next; free(tmp); }
最后用一个main.c文件来进行测试代码功能
#include "slist.h" void listtest() { SList test; SListInit(&test); SListPushFront(&test, 1); SListPushFront(&test, 2); SListPushFront(&test, 4); SListPushFront(&test, 6); SListPushFront(&test, 9); SListPrint(&test); SListPopFront(&test); SListPrint(&test); SListInsertAfter(SListFind(&test, 4), 8); SListPrint(&test); SListEraseAfter(SListFind(&test, 8)); SListInsertFront(&test, 6, 10); SListPrint(&test); SListDestory(&test); } int main(){ listtest(); system("pause"); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。