重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

c语言查找节点的函数 c语言查找算法例题及解析

c语言链表怎么通过节点数据查找节点进行插入或更改;

说一下一个大概的思路,首先定义两个指针,一个指针用来向前移动(叫当前指针),另一个指针紧跟其后(叫前驱指针),这个主要用于链表的增删,判断是否要删除当前指针指向的节点,或者增加节点。如果需要删除当前节点,则前驱指针的下一个节点指向当前指针的下一个节点,释放当前指针指向的节点,然后当前指针指向前驱指针的下一个节点,增加也是一样的,一直这样遍历整个链表。至于修改节点数据,那么需要一个当前指针就够了,找到要修改的节点,修改就好了。

创新互联公司基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业成都西信服务器托管报价,主机托管价格性价比高,为金融证券行业服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

闲着没事干,刚写了代码,给你参考一下:

// 删除节点

void delete_node_credit(float const credit) {

stu *pre_node = head;

stu *cur_node = head-next;

while ( cur_node ) {

if ( cur_node-credit == credit ) {

pre_node-next = cur_node-next;

free(cur_node);

cur_node = pre_node-next;

} else {

pre_node = cur_node;

cur_node = cur_node-next;

}

}

// 判断是否删除头节点

if ( head-credit == credit ) {

cur_node = head-next;

free(head);

head = cur_node;

}

}

// 新增节点

void insert_node_credit(stu *new_node, float const credit) {

stu *pre_node = head;

stu *cur_node = head-next;

if ( pre_node-credit  credit ) { // 新增节点是头节点

head = new_node;

new_node-next = pre_node;

return;

}

while ( cur_node ) {

if (cur_node-credit  credit  pre_node-credit  credit ) {

pre_node-next = new_node;  // 插入新的节点

new_node-next = cur_node;

return;

}

pre_node = cur_node;

cur_node = cur_node-next;

}

// 新增节点插入链表尾部

if ( pre_node-credit  credit ) {

pre_node-next = new_node;

return;

}

}

下面是运行结果

如果你看理解了这个思路,那么链表的增删查改操作就没有问题了。有用的话点一下采纳,谢谢!!!

c语言,求节点位置

#include string.h

#include stdio.h

#include stdlib.h//加入三个头文件,删除#DEFINE NULL 0

typedef int ElemType;

typedef struct node

{

ElemType data;

struct node *next;

}Lnode;

Lnode *head;

void insert(ElemType x,int i)

{

int j=1;

Lnode *s,*q;

s=(Lnode *)malloc(sizeof(Lnode));

s-data=x;

q=head;

if(i==1)

{

s-next=q;

head=s;

}

else

{

while((ji-1)(q-next!=NULL))

{

q=q-next;

j++;

}

if(j==i-1)

{

s-next=q-next;

q-next=s;

}

else

printf("位置参数不正确!");

}

}

int locate(Lnode *p,ElemType x)

{

int n=0;

Lnode *q=p;

while(q!=NULL q-data!=x)

{

q=q-next;

n++;

}

if(q=NULL)

{

return(-1);

}

else

{

return(n+1);

}

}

main()

{

Lnode *q;

int d,i,n,select,k,flag;

head = NULL;

printf("请输入数据长度:");

scanf("%d",n);

for(i=1;i=n;i++)

{

printf("将数据加入到链表中:");

scanf("%d",d);

insert(d,i);

}

printf("\n输入要查找的数据:");

scanf("%d",d);//这里小了个

k=locate(head,d);

printf("%d\n",d);

}

C语言程序,写出一个查找给定值为k的节点的算法

#includestdio.h

#define NULL 0

typedef struct node

{

int key;

struct node *next;

}Node;

Node first;

int main()

{

char c='a';

int k,i,sum=0,flag=0;

Node *p;

p=first;

printf("请输入链表元素(元素之间用空格间隔):\n");

while(c!='\n')

{

scanf("%d",p-key);

p-next=new Node;

p=p-next;

sum++;

c=getchar();

}

p-next==NULL;

printf("请输入要查找的key值:");

scanf("%d",k);

p=first;

printf("查找符合的节点序数为: ");

for(i=0;isum;i++)

{

if(p-key==k)

{

printf("%d ",i+1);

flag=1;

}

p=p-next;

}

if(flag==0)

printf("无\n查找失败!\n");

}


网页标题:c语言查找节点的函数 c语言查找算法例题及解析
当前链接:http://cqcxhl.com/article/dogpeii.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP