c语言单向链表插入字符串,C语言之单向链表
1,单向链简洁。
单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指列表中的下一个结点;
列表是由结点构成,由head指针指向第一个成为表头的结点而终止于最后一个指向nuLL的指针;
2,例子要求:
根据示例代码中的例子,完成单向链表(single linked list)中的以字符串为数据的链表的插入、删除以及查找,并支持单向链表的反转;
3,代码实现。
#include
#include
#include
#include
#include
//节点的定义
typedef struct Node {
void *data; //数据域 //链域
struct Node *next;
} NodeStruct, *pNode;
pNode head = NULL;
typedef char (*pCompareFunc)(void *a, void *b);
typedef void* (*pChar)(void *p);
// 字符串判断
int str_compare(void *a, void *b) {
char *pa = (char*)a;
char *pb = (char*)b;
return strcmp(pa , pb);
}
// 分配一个节点
pNode allocate_node(void *data, pChar char_func) {
pNode node = allocate();
node->data = char_func(data);
return node;
}
// 创建节点
pNode allocate() {
void *p = malloc(sizeof(NodeStruct));
pNode node = (pNode)p;
node->next = NULL;
node->data = NULL;
return node;
}
// 添加一个节点
void insertNode(pNode node){
if (head == null){
head=node;
}
else {
node->next = head;
head = node;
}
}
void* char_char(void *p) {
char* pa = (char*)malloc(sizeof(char));
memcpy(pa, p, sizeof(char));
return pa;
}
// 初始化节点
pNode allocate_node(void *data, pChar char_func) {
pNode node = allocate();
node->data = char_func(data);
return node;
}
// 释放资源
void free_list(pNode node) {
pNode next = node;
while (next != NULL) {
if (next->data != NULL)
free(next->data);
pNode temp = next;
next = next->next;
free(temp);
}
}
// 1.1 添加一个节点
void insert(pNode node) {
if (head == NULL)
head = node;
else {
node->next = head;
head = node;
}
}
//1.2查找
int str_search(void* data,pCompareFunc compare){
pNode next = head;
pNode prev = NULL;
while (next != NULL ) {
if (compare(data, next->data) == 0) {
// 如果查找到了,就退出返回1
return 1;
break;
}
prev = next;
next = next->next;
}
// 如果一直查找不到,就返回0
return 0;
}
// 1.3删除节点
void remove(void* data,pCompareFunc compare) {
pNode next = head;
pNode prev = NULL;
while (next != NULL) {
if (compare(data, next->data) == 0) {
if (prev == NULL) {
head = next->next;
next->next = NULL;
free_list(next);
} else {
prev->next = next->next;
next->next = NULL;
free_list(next);
}
break;
}
prev = next;
next = next->next;
}
}
//1.4反转
void invert_order()
{
node *This,*prev;
p=head.next;
This=NULL;
while(p) {
prev=This;
This=p;
p=p->next;
This->next=prev;
}
head.next=This;
}
void main(){
// 1单向链表
char a1[] = 'aaa1';
char a2[] = 'aaa2';
char a3[] = 'aaa3';
// 1.1添加
insertNode(allocate_node(a1, init_char));
insertNode(allocate_node(a2, init_char));
insertNode(allocate_node(a3, init_char));
// 1.2查找
int flag = 0;
flag = str_search(&a2,str_compare);
// 1.3删除
remove(&a2,str_compare);
// 1.4反转
invert_order();
}
c语言单向链表插入字符串,C语言之单向链表相关推荐
- 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt
1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...
- c语言将字母存入字符串,C语言把资料读入字符串以及将字符串写入文件
C语言把文件读入字符串以及将字符串写入文件 1.纯C实现 FILE *fp; if ((fp = fopen("example.txt", "rb")) == ...
- c 语言比较三个字符串,C语言字符篇(三)字符串比较函数
C语言字符篇(三)字符串比较函数 #include int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(cons ...
- c语言如何浮点数转换为字符串,C语言把浮点数转换为字符串
1.把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供把float/double转换为字符串的库函数,而是采用sprintf和snprin ...
- c语言如何赋值空字符串,c语言中如何给字符串数组赋值
c语言中如何给字符串数组赋值 1.问题 这是我写的 struct student { int x; char name[10]; }; void main() { student st: st.nam ...
- c语言 表示逗号的字符串,c语言逗号表达式的运算规则
c语言逗号表达式的运算规则 c语言逗号表达式是由左向右进行的:k=3*2=6,K+2=8,表达式返回8. 逗号表达式用法: 当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一 ...
- 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)
目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...
- c语言连接多个字符串,c语言连接多个字符串(strcat函数实现)
想要用c语言实现字符串的连接,尤其是多个字符串的连接,由于不能直接用"+"相连,其实还是比较麻烦的.本人初学,接触到的字符串连接方法主要有两种:1)用sprintf()函数:2)多 ...
- c语言从文件查找字符串,C语言文件中字符串的查找与替换?
C语言文件中字符串的查找与替换? #include #include #include #include int Count=0; int findNum(char *str) { int i=0,t ...
最新文章
- 集成git怎样更新代码_持续集成之理论篇
- 2336: [HNOI2011]任务调度 - BZOJ
- tcp java实例_实现了基于TCP的Java Socket编程实例代码
- 互联网日报 | 7月8日 星期四 | 小鹏汽车港交所上市;同程生活宣布申请破产;紫光国微市值突破千亿元...
- mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
- Source InSight context 窗口丢失的解决办法
- Anaconda3下载失败的解决方法
- 更强大的技术团队和更雄厚的预算,海外高频巨头抢占中国市场,不少本土团队淘汰出局
- 【图像压缩】基本matlab DCT+量化+huffman JPEG图像压缩【含Matlab源码 1217期】
- SonicWall远程命令执行漏洞
- 恒指赵鑫:8.7恒指德指喊单记录与晚盘前瞻
- Android N混合编译与对热补丁影响解析
- AD19 编译报错:has only one pin 和 floating net label
- 城市建筑类毕业论文文献都有哪些?
- 2021海兴中学高考成绩查询,2021金昌市地区高考成绩排名查询,金昌市高考各高中成绩喜报榜单...
- Oralce 11g 恢复 .dmp 文件方法及过程
- 解决FLASHCS5代码提示无效的方法_…
- Adobe Photoshop 画笔无压感
- UnserializeOne
- 影刀常见bug及解决方法1
热门文章
- Windows10 由家庭版升级到专业版
- 微信分享卡片制作_微信分享卡片自定义制作
- 信息技术学业水平考试 上机考试 18题 Word操作题(20分)三
- 大型机/IBM大型机 简介
- WSF操作系统抽象层学习笔记 (一) ---简介和内存管理
- IOS---如何获取当前的日期和时间(阴历阳历),并显示带阴历阳历24节气的日历
- javax.el.PropertyNotFoundException: Property 'username' not found on type pers.wsf.multiBlog.pojo.Ar
- 给我讲解一下傅里叶变换与衍射的关系
- 前端基础入门之css字体相关
- 如何使用C-Lodop保存PDF格式文件