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语言之单向链表相关推荐

  1. 14c语言合并两个字符串,C语言的标识符和字符数据、字符串数据.ppt

    1·2 C语言的标识符和字符数据.字符串数据 本节的任务是掌握用printf()函 数在屏幕的任意位置打印字 符组成的图案. 1·2·1 C语言的字符串数据.字符数据和转义字符 • 例1_1_2 用p ...

  2. c语言将字母存入字符串,C语言把资料读入字符串以及将字符串写入文件

    C语言把文件读入字符串以及将字符串写入文件 1.纯C实现 FILE *fp; if ((fp = fopen("example.txt", "rb")) == ...

  3. c 语言比较三个字符串,C语言字符篇(三)字符串比较函数

    C语言字符篇(三)字符串比较函数 #include int strcmp(const char *s1, const char *s2);    比较字符串s1和s2 int strncmp(cons ...

  4. c语言如何浮点数转换为字符串,C语言把浮点数转换为字符串

    1.把float/double格式化输出到字符串 标准的C语言提供了atof函数把字符串转double,但是没有提供把float/double转换为字符串的库函数,而是采用sprintf和snprin ...

  5. c语言如何赋值空字符串,c语言中如何给字符串数组赋值

    c语言中如何给字符串数组赋值 1.问题 这是我写的 struct student { int x; char name[10]; }; void main() { student st: st.nam ...

  6. c语言 表示逗号的字符串,c语言逗号表达式的运算规则

    c语言逗号表达式的运算规则 c语言逗号表达式是由左向右进行的:k=3*2=6,K+2=8,表达式返回8. 逗号表达式用法: 当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一 ...

  7. 【 C 】简化双链表插入函数(对在双链表中插入一个新值的简明程序的简化)

    目录 背景 第一个技巧是语句提炼(statement factoring) 第二个简化技巧 最终简化版本 背景 上篇博文:[ C ]在双链表中插入一个新值的简明程序,讲了一个简明的双链表插入函数,那个 ...

  8. c语言连接多个字符串,c语言连接多个字符串(strcat函数实现)

    想要用c语言实现字符串的连接,尤其是多个字符串的连接,由于不能直接用"+"相连,其实还是比较麻烦的.本人初学,接触到的字符串连接方法主要有两种:1)用sprintf()函数:2)多 ...

  9. c语言从文件查找字符串,C语言文件中字符串的查找与替换?

    C语言文件中字符串的查找与替换? #include #include #include #include int Count=0; int findNum(char *str) { int i=0,t ...

最新文章

  1. 集成git怎样更新代码_持续集成之理论篇
  2. 2336: [HNOI2011]任务调度 - BZOJ
  3. tcp java实例_实现了基于TCP的Java Socket编程实例代码
  4. 互联网日报 | 7月8日 星期四 | 小鹏汽车港交所上市;同程生活宣布申请破产;紫光国微市值突破千亿元...
  5. mysql与php驱动程序_用PHP和MySQL构建一个数据库驱动的网站_php
  6. Source InSight context 窗口丢失的解决办法
  7. Anaconda3下载失败的解决方法
  8. 更强大的技术团队和更雄厚的预算,海外高频巨头抢占中国市场,不少本土团队淘汰出局
  9. 【图像压缩】基本matlab DCT+量化+huffman JPEG图像压缩【含Matlab源码 1217期】
  10. SonicWall远程命令执行漏洞
  11. 恒指赵鑫:8.7恒指德指喊单记录与晚盘前瞻
  12. Android N混合编译与对热补丁影响解析
  13. AD19 编译报错:has only one pin 和 floating net label
  14. 城市建筑类毕业论文文献都有哪些?
  15. 2021海兴中学高考成绩查询,2021金昌市地区高考成绩排名查询,金昌市高考各高中成绩喜报榜单...
  16. Oralce 11g 恢复 .dmp 文件方法及过程
  17. 解决FLASHCS5代码提示无效的方法_…
  18. Adobe Photoshop 画笔无压感
  19. UnserializeOne
  20. 影刀常见bug及解决方法1

热门文章

  1. Windows10 由家庭版升级到专业版
  2. 微信分享卡片制作_微信分享卡片自定义制作
  3. 信息技术学业水平考试 上机考试 18题 Word操作题(20分)三
  4. 大型机/IBM大型机 简介
  5. WSF操作系统抽象层学习笔记 (一) ---简介和内存管理
  6. IOS---如何获取当前的日期和时间(阴历阳历),并显示带阴历阳历24节气的日历
  7. javax.el.PropertyNotFoundException: Property 'username' not found on type pers.wsf.multiBlog.pojo.Ar
  8. 给我讲解一下傅里叶变换与衍射的关系
  9. 前端基础入门之css字体相关
  10. 如何使用C-Lodop保存PDF格式文件