next =getchar()将输入的字符打印

本文介绍了一种使用递归方法在控制台输出通过getchar()获取的字符串的技术。该方法类似于数组下标操作但不能直接使用下标访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
这里写图片描述
这里写图片描述

next = getchar();
在控制面板输入字符串后 可以通过递归的方法输出
方法有点像取下标**

但是

** 用取下标的方式是不可行的 编译就会报错

#include<stdio.h> #include<stdlib.h> typedef char DataType;/*定义结点的数据类型*/ typedef struct node {/*结点类型定义*/ DataType data;/*结点的数据域*/ struct node* next;/*结点的指针域*/ }ListNode, * LinkList;/*结构体类型标识符*/ ListNode* p;/*定义一个指向结点的指针*/ LinkList head;/*定义指向链表的头指针*/ LinkList CreatListRH(void) { DataType ch; LinkList head; ListNode *s, * r; head = (ListNode *)malloc(sizeof(ListNode)); head->next = NULL; r = head; printf("请输入链表各节点的数据(字符型):\n"); while ((ch = getchar()) != '\n');{ s = (ListNode *)malloc(sizeof(ListNode)); s->data = ch; s->next = NULL; r->next = s; r = s; } r->next = NULL; return head; }/*用尾插法建立带头结点的单链表*/ int LengthListH(LinkList head) { ListNode *p = head; int j = 0; while (p->next) { p = p->next; j++; } return j; }/*求带头结点的单链表的表长*/ ListNode* LocateNode(LinkList head, DataType key) { ListNode* p = head->next; while (p && p->data != key) p = p->next; return p; }/*按值在带头结点的单链表中查找*/ int InsertList(LinkList head, DataType x, int i) { ListNode* p, * s; p = GetNode(head, i - 1); if (p == NULL) { printf("未找到第%d个结点", i - 1); return 0; } s = (ListNode*)malloc(sizeof(ListNode)); s->data = x; s->next = p->next; p->next = s; return 1; } /*链表的插入*/ int DeleteList(LinkList head, int i) { ListNode* p, * r; p = GetNode(head, i - 1); if (p == NULL || p->next = NULL) { printf("未能找到第%d个结点", i - 1); return 0; } r = p->next; p->next = r->next; free(r); return 1; }/*链表的删除*/ int main() { // 创建链表 head = CreatListRH(); // 获取链表长度并打印 int length = LengthListH(head); printf("链表长度: %d\n", length); // 按值查找 DataType searchKey; printf("请输入要查找的值: "); scanf(" %c", &searchKey); ListNode* result = LocateNode(head, searchKey); if (result) { printf("找到了值为 %c 的节点\n", searchKey); } else { printf("未找到值为 %c 的节点\n", searchKey); } // 插入节点 DataType insertValue; int insertPosition; printf("请输入要插入的值: "); scanf(" %c", &insertValue); printf("请输入要插入的位置: "); scanf("%d", &insertPosition);if (InsertList(head, insertValue, insertPosition)) { printf("插入成功\n"); } else { printf("插入失败\n"); } // 删除节点 int deletePosition; printf("请输入要删除的位置: "); scanf("%d", &deletePosition); if (DeleteList(head, deletePosition)) { printf("删除成功\n"); } else { printf("删除失败\n"); } // 释放链表内存(这里简单实现,可进一步完善) ListNode* current = head; ListNode* next; while (current) { next = current->next; free(current); current = next; } return 0; }修改以上代码
03-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值