gpt4 book ai didi

c - 实现循环列表以及如何删除列表中的中间节点

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:04 25 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>

struct cir{

int info;
struct cir* next;

};

struct cir* create(int num){

struct cir* temp;

temp=(struct cir*)malloc(sizeof(struct cir));

temp->info=num;
temp->next=NULL;

return(temp);
}


struct cir* insertlast(struct cir** head0, struct cir* new1){

struct cir* temp;

temp=(*head0);

if(temp==NULL){

new1->next=new1;

return(new1);
}

else{

while(temp->next !=(* head0) ){

temp=temp->next;

temp->next=new1;
new1->next=(*head0) ; }

}

return(*head0);

}

void vizualize(struct cir* head0){

struct cir* temp;

temp=head0;

printf("Lista:");

while(head0->next != temp ){

printf("[%d]-->", head0->info);
head0 =head0 ->next;

}

printf("%d(testa)", head0->info);



}

int main(){

struct cir* head;
int i,n1,n2;
struct cir* new1;


printf("Insert the number of elements you want to put in the list:\n\n");
scanf("%d", &n1);

for(i=0;i<n1;i++){

printf("Insert the element you want to insert in the list:\n\n");
scanf("%d", &n2);

new1=create(n2);

insertlast(&head,new1);
}

vizualize(head);

}

你好!我编写了这段代码来实现一个 CIRCULAR 列表,但是当我尝试运行代码时它崩溃了。

我创建了函数 struct cir* create(int num) 来创建一个元素,通过调用函数 struct cir* insertlast(struct cir ** head0, struct cir* new1 攻击元素到循环链表。

此外,作为对双向列表的保护:

 if(temp->next!=NULL){

(temp->next)->prev=NULL;

什么是

(temp->next)->prev=NULL;

做吗?

最后一个问题,有没有人可以在这里写一个代码来删除单向列表中间的一个元素?我以任何方式尝试过,但每次我尝试删除一个元素时,程序崩溃或列表以相同的方式可视化!

非常感谢!

ps.从列表中删除和提取元素有什么区别?

最佳答案

这会起作用:

#include <stdio.h>
#include <stdlib.h>

struct cir {
int info;
struct cir* next;
};

struct cir* create(int num) {

struct cir* temp;

temp = (struct cir*)malloc(sizeof(struct cir));

temp->info = num;
temp->next = NULL;

return(temp);
}


struct cir* insertlast(struct cir* head0, struct cir* new1) {

struct cir* last;

if ( head0 == NULL ) {

new1->next = new1;

return new1;
}
else {
last = head0;
while (last->next != head0) {
last = last->next;
}

last->next = new1;
new1->next = head0;

return head0;
}
}

void vizualize(struct cir* head0) {

struct cir* temp;

if (head0) {
temp = head0;

printf("List:");

do {
printf("[%d]-->", temp->info);
temp = temp->next;
} while ( temp != head0 );
}
}

int main() {

struct cir* head;
int i, n1, n2;
struct cir* new1;

head = 0;

printf("Insert the number of elements you want to put in the list:\n\n");
scanf("%d", &n1);

for (i = 0; i < n1; i++) {

printf("Insert the element you want to insert in the list:\n\n");
scanf("%d", &n2);

new1 = create(n2);

head = insertlast(head, new1);
}

vizualize(head);
}

请注意,我已经在 c++ 编译器上测试了它,而不是 c。

which is the difference between deleting and extracting an element from a list?

提取意味着您从列表中删除元素并可以使用它。删除意味着您不仅可以从列表中删除,还可以释放内存。

关于c - 实现循环列表以及如何删除列表中的中间节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com