C语言实现单链表——之基本操作1
来源:互联网 发布:ms sql 日期函数 编辑:程序博客网 时间:2024/05/16 08:23
一般面试题中会考虑无头节点的单链表下面是一些实现:
声明Sqlist.h文件
#pragma once#include <assert.h>#include <stdio.h>typedef int Datatype;typedef struct SList{ Datatype data; struct SList* next;}SList, *PSlist;//无头结点// 初始化单链表(对于无头结点单链表,该函数没有意义)void InitList(PSlist* pHead);// 销毁单链表void DestroyList(PSlist* pHead);// 尾插void PushBack(PSlist* pHead, Datatype data);// 尾出void PopBack(PSlist* pHead);// 头插void PushFront(PSlist* pHead, Datatype data);// 头出void PopFront(PSlist* pHead);// 在链表中查找元素dataPSlist Find(PSlist pHead, Datatype data);// 删除pos位置的结点(注意不能用那种替换形式)void Erase(PSlist* pHead, PSlist pos);// 在链表的pos位置插入元素datavoid Insert(PSlist* pHead, PSlist pos, Datatype data);void PrintList(PSlist pHead);
函数实现:
#pragma once#include "Sqlist.h"void InitList(PSlist* pHead){ assert(pHead); *pHead = NULL; return;}void PrintList(PSlist pHead)////?????{ while (pHead) { printf("%d->", pHead->data); pHead = pHead->next; } printf("NULL\n");}PSlist BuyNode(Datatype data){ PSlist pNew = (PSlist)malloc(sizeof(SList)); if (pNew == NULL) { return NULL; } pNew->next = NULL; pNew->data = data; return pNew;}void PushBack(PSlist* pHead, Datatype data){ assert(pHead); PSlist pNewNode = BuyNode(data); PSlist pTemp = *pHead; if (pTemp == NULL) { *pHead =pNewNode; return; } while (pTemp->next != NULL) { pTemp = pTemp->next; } pTemp->next = pNewNode;}void PopBack(PSlist* pHead){ assert(pHead); PSlist pPre = *pHead; if (pPre == NULL) { return; } if (pPre->next == NULL) { free(pPre); pPre = NULL; *pHead = NULL; } if (pPre != NULL) { PSlist pDel = pPre->next; while (pDel->next != NULL) { pPre = pPre->next; pDel = pDel->next; } pPre->next = NULL; pDel->next = NULL; free(pDel); } return;}void PushFront(PSlist* pHead, Datatype data){ assert(pHead); PSlist pNew = BuyNode(data); if (pNew == NULL) { return; } pNew->next = *pHead; *pHead = pNew;//}void PopFront(PSlist* pHead){ assert(NULL != pHead); PSlist pCur = *pHead; if (pCur == NULL) { return; } else { *pHead = pCur->next; free(pCur); pCur->next = NULL; }}PSlist Find(PSlist pHead, Datatype data){ assert(pHead); while (pHead) { if(pHead->data == data) return pHead; pHead = pHead->next; } return NULL;}void Erase(PSlist* pHead, PSlist pos)//1无节点 //2有节点{ PSlist pPrepos = *pHead; assert(NULL != pos); assert(NULL != pHead); if (pos == *pHead) { PSlist pCur = *pHead; *pHead = pos->next; free(pCur); pCur->next = NULL; } else { while (pPrepos->next!= pos) { pPrepos = pPrepos->next; } pPrepos->next = pos->next; free(pos); pos->next = NULL; }}void Insert(PSlist* pHead, PSlist pos, Datatype data)//后插{ assert(NULL != pHead); assert(NULL != pos); PSlist pNew = BuyNode(data); if (pNew == NULL) { return; } pNew->next = pos->next; pos->next = pNew;}
测试函数:
#include "SList.h"//Init Print Pushbackvoid Fun1(){ PSlist slist; InitList(&slist); PushBack(&slist,1); PushBack(&slist,2); PushBack(&slist, 3); PushBack(&slist, 4); PopBack(&slist); PopBack(&slist); PopBack(&slist); PopBack(&slist); PopBack(&slist); PrintList(slist);}//PushFront PopFrontvoid Fun2(){ PSlist slist; InitList(&slist); PushFront(&slist, 1); PushFront(&slist, 2); PushFront(&slist, 3); PushFront(&slist, 4); PopFront(&slist); PopFront(&slist); PopFront(&slist); PopFront(&slist); PrintList(slist);}//Erase Findvoid Fun3(){ PSlist slist; InitList(&slist); PushFront(&slist, 1); PushFront(&slist, 2); PushFront(&slist, 3); PushFront(&slist, 4); //Erase(&slist, Find(slist, 4)); Insert(&slist, Find(slist, 4), 8);//找不到该位置就是NULL,assert(pos)会报错 PrintList(slist);}
0 0
- C语言实现单链表——之基本操作1
- C语言实现单链表的基本操作
- 单链表的基本操作c语言实现
- C语言实现单链表的基本操作
- 单链表的基本操作C语言实现
- 单链表基本操作C语言实现
- c语言 之 单链表 的 基本操作
- 单链表基本操作示例1[C语言实现]
- C语言之基本算法39—字符串经典操作
- 单链表的基本操作大全之C语言实现(一)
- 单链表的基本操作大全之C语言实现(二)
- 数据结构—单链表的部分基本操作(C语言)
- 第一篇博客—c语言单链表的基本操作
- C语言单链表基本操作
- 基于单链表的列表基本操作 类C语言实现
- C语言实现单链表(带头结点)的基本操作
- 《数据结构与算法》-单链表基本操作的C语言实现
- 单链表的基本操作(C语言实现)
- poj 2155 Matrix 【二维线段树】
- 蓝桥杯 基本训练 数的读法
- struts 迭代器iterator四种使用方式 S标签
- oracle 修改用户名
- HDU 3555 Bomb (数位DP)
- C语言实现单链表——之基本操作1
- Centos修改语言为英文
- Dagger是什么和我们怎么通过使用它获得收获
- Vysor使用——用电脑操作手机 无需Root
- Tuning Windows Server 2008 for PHP
- 如何给20151230版caffe添加新的层 (一)
- NTFS文件系统详解(一)之硬盘基本信息
- Http协议和Https协议的区别
- 获取Android SHA1与Package