动态链表的输入输出

这个程序只为实现其功能,并未对其完善,意在了解动态链表的节点的申请,,实现输入输出。若要了解某个节点当前处于什么状态,可在其前面加上printf("%d\n",p->date);此时会输出当前p节点的值,帮助理解

上图:

代码:

#include<stdio.h>
#include<stdlib.h>
struct node{          //定义结构体,名字为node
char date;
 struct node *next;
 }


 main()
 {
 int x;
 struct node *head,*s,*r,*q;   //声明结构体中要用到的指针
 head=(struct node *)malloc(sizeof(struct node));  //用head指针去指向新生成的头节点
 r=head;        //将r指向头指针
 printf("please input number_\n");
 scanf("%d",&x);
 while(x!=0)  //当输入0时结束录入
 {
 s=(struct node *)malloc(sizeof(struct node));//用S去指向新生成的节点
 s->date=x;    //把第一个字符放在新生成的节点域
 r->next=s;  //让头节点指向新生成的节点
 r=s;     //  r指向新生成的节点
 scanf("%d",&x);    //继续录入
 }

r->next=NULL;     //把终端节点的指针域置为空
 q=head;        //让q指向头指针
 while(q!=r)      //判断q是否指向了终端节点
 {
 q=q->next;    //q指向下一个节点
 printf("%d ",q->date);   //输出数据
 }
  printf("\n");

 struct node *p;    //声明指针*p
 int i=1,n;       //用变量i记录指针移动的次数
 printf("please input you want inset number_and inset where\n");
 scanf("%d %d",&x,&n);    //从键盘接受需要插入的数据
 //x=getchar();
 p=head->next;     //让p指向头节点的下一个节点
 while(i<n)        //当<5时,及让p移动5次
 {
     p=p->next;
     i++;
 }
 s=(struct node *)malloc(sizeof(struct node));//用s指向新生成的节点
 s->date=x;        //把接收到的字符放在新生成的节点域
 s->next=p->next;   //用新生成的节点去指向P的后一个节点
 p->next=s;         //让前面循环停下来的位点的值去指向新生成的节点

 r->next=NULL;
 q=head;
 while(q!=r)
 {
 q=q->next;
 printf("%d ",q->date);
 }

 system("pause");  //等待从键盘输入
 }


### 链表的数据结构及其输入输出实现方法 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的[^2]。链表的主要特点是动态分配内存,能够灵活地处理不同大小的数据集合。 在 Python 中,可以通过定义一个节点类 `ListNode` 和一个链表类 `LinkList` 来实现链表的初始化、输入和输出操作。以下是具体的实现方法: #### 1. 节点类定义 节点类用于表示链表中的每个节点,包含两个主要属性:`val`(存储节点值)和 `next`(指向下一个节点的指针)。 ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next ``` #### 2. 链表类定义 链表类负责管理多个节点,并提供初始化、插入节点和打印链表的功能。 ```python class LinkList: def __init__(self): self.head = None # 初始化头节点为空 def initList(self, data): """根据给定的数据列表初始化链表""" if not data: # 如果数据为空,则直接返回 return self.head = ListNode(data[0]) # 创建头节点 r = p = self.head # 定义两个指针 r 和 p 指向头节点 for i in data[1:]: node = ListNode(i) # 创建新节点 p.next = node # 将当前节点的 next 指向新节点 p = p.next # 移动指针到下一个节点 return r def printList(self, head): """打印链表中的所有节点值""" if head is None: # 如果头节点为空,直接返回 return [] node = head l = [] # 用于存储节点值的列表 while node is not None: l.append(node.val) # 将节点值添加到列表中 node = node.next # 移动到下一个节点 print(l) ``` #### 3. 示例代码 以下是一个完整的示例,展示如何使用上述类来创建链表并进行输入输出操作。 ```python if __name__ == "__main__": # 初始化链表 ll = LinkList() # 输入数据 data = [1, 2, 3, 4, 5] head = ll.initList(data) # 初始化链表 # 输出数据 print("链表内容为:") ll.printList(head) ``` 运行结果: ``` 链表内容为: [1, 2, 3, 4, 5] ``` 与数组相比,链表在处理大数据时具有显著优势。当需要频繁插入或删除元素时,链表的性能优于数组,因为链表不需要移动其他元素即可完成操作[^1]。 ### 总结 链表是一种灵活的数据结构,适用于动态数据集合的场景。通过定义节点类和链表类,可以方便地实现链表的初始化、插入和打印功能。对于大数据的输入输出链表的优势在于其动态特性和较低的代码复杂度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值