struct Linke { float data; struct Link *next; }; struct Link * Fun(int n) { struct Link *head =NULL,*p,*pr; int i; for(i =1;i <= n;i++) {p=(struct Link *)malloc(sizeof(struct Link)); p->data = i;e p->next=NULL; if(head -NULL) { head=p; pr=p; } else{ pr->next-p; pr=p; } return head;e }
时间: 2023-05-18 12:04:33 浏览: 97
这是一个定义了一个结构体Link的函数Fun,函数的功能是创建一个链表,链表的结构体Link中有两个成员:一个浮点类型的数据data和一个指向另一个结构体Link的指针next。函数的参数是一个整数n,函数在循环中创建n个Link结构体,并将它们连接成一个链表。 最后,函数返回指向链表开头的指针head。
相关问题
#include <stdio.h> #include <stdlib.h> struct link { int data; struct link *next; }; struct link *AppendNode(struct link *head,int data); void DisplyNode(struct link *head); void DeleteMemory(struct link *head); struct link * DeleteNode(struct link *head,int data); struct link *InsertNode(struct link *head, int nodeData); int main() { char c; int data = 0; struct link head = NULL; / 链表头指针 / while (1) { scanf("%d",&data); if (data==-1) break; head = AppendNode(head,data);/ 向head为头指针的链表末尾添加节点 / } DisplyNode(head); / 显示当前链表中的各节点信息 / scanf("%d",&data); head = InsertNode(head,data); DisplyNode(head); / 显示当前链表中的各节点信息 / DeleteMemory(head); / 释放所有动态分配的内存 */ return 0; } struct link *AppendNode(struct link *head,int data){ struct link pnew,ptail; pnew=head; if(head==NULL){ head=(struct link)malloc(sizeof(struct link)); head->data=data; head->next=NULL; }else{ while(pnew!=NULL){ ptail=pnew; pnew=pnew->next; } pnew=(struct link)malloc(sizeof(struct link)); pnew->data=data; ptail->next=pnew; pnew->next=NULL; } return head; }; void DisplyNode(struct link *head){ struct link *p; p=head; while(p!=NULL){ if(p->next !=NULL) printf("%d->",p->data); else{ printf("%d\n",p->data); break; } p=p->next; } } struct link *InsertNode(struct link *head, int nodeData){ struct link *p,q,t; p=head; if(head->data>nodeData){ head=(struct link)malloc(sizeof(struct link)); head->data=nodeData; head->next=p; }else{ while(1){ if(p->next->data>nodeData) { q=(struct link)malloc(sizeof(struct link)); t=p->next; p->next=q; q->data=nodeData; q->next=t; break; } p=p->next; } } return head; }; void DeleteMemory(struct link *head) { free (head); }
这段代码存在几个问题:
1. 在结构体中,head应该是指向struct link的指针类型,而不是直接使用struct link类型。
2. 在AppendNode函数中,pnew和ptail应该都是指向struct link的指针类型,而不是直接使用struct link类型;同时,在pnew指向最后一个节点的情况下,需要把新节点pnew挂到ptail的后面,而不是直接把pnew赋值给head。
3. 在InsertNode函数中,q和t也应该是指向struct link的指针类型,而不是直接使用struct link类型;同时,在链表中插入节点时,需要特别注意插入位置是在头节点前面还是后面。
4. 在DeleteMemory函数中,应该释放整个链表,而不是只释放头节点。
5. 在代码中缺少头文件的换行,需要添加一些换行符来让代码更清晰易读。
下面是修改后的代码:
#include <stdio.h> #include<stdlib.h> struct node {int ch; struct node * next;}; struct node *setlink(int N);//建立链表函数,已经定义 int max_node(struct node * head);//需要定义这个函数 int main() { int N; struct node *head; scanf("%d",&N); head=setlink(N); printf("%d", max_node(head)); return 0; }
好的,这是一个求链表中最大值节点的代码框架,需要补充max_node函数的实现。下面是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
struct node {
int val;
struct node* next;
};
struct node* setlink(int N);
int max_node(struct node* head);
int main() {
int N;
struct node* head;
scanf("%d", &N);
head = setlink(N);
printf("%d", max_node(head));
return 0;
}
struct node* setlink(int N) {
struct node* head = NULL;
struct node* cur = NULL;
for (int i = 0; i < N; i++) {
int val;
scanf("%d", &val);
struct node* newNode = (struct node*)malloc(sizeof(struct node));
newNode->val = val;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
cur = head;
} else {
cur->next = newNode;
cur = newNode;
}
}
return head;
}
int max_node(struct node* head) {
if (head == NULL) {
return -1;
}
int maxVal = head->val;
struct node* cur = head->next;
while (cur != NULL) {
if (cur->val > maxVal) {
maxVal = cur->val;
}
cur = cur->next;
}
return maxVal;
}
```
其中,setlink函数用于建立链表。max_node函数用于查找链表中的最大值节点。在main函数中,先输入链表的长度N,然后调用setlink函数建立链表,并将链表头节点传入max_node函数中进行查找。最后输出最大值节点的值。
阅读全文