#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); }
时间: 2024-04-01 15:35:24 浏览: 52
这段代码存在几个问题:
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> typedef int elemtype; typedef struct link_node { elemtype data; link_node* next; }link_node; typedef struct { link_node* front, * rear; }link_queue; //初始化 void init_queue(link_queue& q) { q.front = q.rear = (link_node*)malloc(sizeof(link_node)); q.front->next = NULL; }
您好!您的第一个问题是关于一个简单的队列数据结构的初始化函数。下面是该函数的实现代码:
```c
#include<stdio.h>
#include<stdlib.h>
typedef int elemtype;
typedef struct link_node {
elemtype data;
link_node* next;
}link_node;
typedef struct {
link_node* front, * rear;
}link_queue;
//初始化
void init_queue(link_queue& q) {
q.front = q.rear = (link_node*)malloc(sizeof(link_node));
q.front->next = NULL;
}
```
这段代码定义了一个队列的数据结构`link_queue`,其中包含了一个前指针`front`和一个后指针`rear`。通过调用`init_queue`函数,可以初始化一个空队列。在初始化过程中,会为`front`和`rear`分配内存,并将它们都指向同一个空的链表节点。此时,队列为空,即没有任何元素。
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> typedef struct user_information { int flag; int name; char key[10]; struct user_information* next; }user;
这是一个定义了用户信息的结构体 user_information,并定义了一个别名 user。该结构体包含了用户的标识符 flag、用户名 name、密码 key 和指向下一个用户的指针 next。其中,flag 和 name 都是整型,key 是一个长度为 10 的字符串。这个结构体可以用于存储用户的信息,例如在一个用户管理系统中,可以用单链表来存储所有注册的用户信息,每个节点就是一个 user 结构体,包含了该用户的所有信息。
阅读全文