粗暴,干就完了----徐晓冬似的C语言自学笔记-----实现一个链表结构
2024-09-05 05:25:51
#include <stdio.h>
#include <stdlib.h>
#define N 5
/*N 假定数组长度为5*/
typedef struct snode
{
int data;
struct snode *next;
} SNODE; /*第一步,添加链表头信息*/
SNODE *createhead(int a[])
{
SNODE *h,*p,*q;
/*q为上一节点,p为当前节点*/
int i;
q=(SNODE *)malloc(sizeof(SNODE));
h=q;
for(i=;i<N;i++)
{
p=(SNODE *)malloc(sizeof(SNODE));
p->data = a[i];
q->next=p;
q=p;
}
q->next=;
return h;
} /*第二步打印链表中的元素*/
void showstars(SNODE *h)
{
SNODE *p;
p=h->next;
while(p)
{
printf("%d 其地址为 %x\n",p->data,p);
p=p->next;
}
} /*第三步删除/回收节点*/
void revokeresource(SNODE *h)
{
SNODE *p,*q;
p=h->next;
while(p)
{
q=p->next;
printf("哦,no~~~%d被回收了\n",p->data);
free(p);
p=q;
}
free(h);
} /*添加一个节点,目标在值为4的结点前添加一个结点,如果值为4的节点不存在,则在末尾添加一个结点*/
void insert(SNODE *h,int a,int d)
{
SNODE *p,*q;
SNODE *s;
s=(SNODE *)malloc(sizeof(SNODE));
s->data=d;
q=h;p=h->next;
while(p)
{
if(p->data==a) break;
q=p;p=p->next;
}
s->next=q->next;
q->next=s;
showstars(h);
} /*删除值为targetdta的链接节点*/
void collectnode(int targetdata,SNODE *h)
{
SNODE *p,*q;
p=h->next;
q=h;
while (p)
{
if(p->data==targetdata)
{
break;
}
q=p;p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
}
} void main()
{
int saiwa[N]={,,,,};
SNODE *head;
head=createhead(saiwa);
showstars(head);
printf("================*在数组的值4前插入节点值8=================\n");
insert(head,,); printf("================*回收节点4=================\n");
collectnode(,head);
showstars(head);
}
输出结果:
最新文章
- C#组合查询小Demo
- Node 编程规范
- 判断IP地址的类型
- Sublime文本排序&;查找重复行&;删除重复行
- 转:CPU与内存的那些事
- 【PL/SQL练习】基本的PL/SQL语句
- jQuery中 wrap() wrapAll() 与 wrapInner()的区别
- What&#39;s Exposure?
- 安卓(android)建立项目时失败,出现Android Manifest.xml file missing几种解决方法?(总结中)
- 修改文件所有者 chown
- SonicUI在MFC中的使用
- 转自知乎-wifi破解
- Docker学习系列(二)Docker初体验
- RxJava操作符(02-创建操作)
- Linux内核中SPI总线驱动分析
- Servlet第五课:Cookie的使用
- nodejs——压缩文件_archiver
- python configparser配置文件解析器
- 使用Sigar获取服务器信息
- 正确的使用margin:0 auto与body{text-align:center;}实现元素居中(转)