#include <stdio.h> #include <stdlib.h> typedef int Datatype; typedef struct node { Datatype data; struct node *next; } LNode, *LinkList; LinkList createlist(); LinkList deleteeven(LinkList H); void printlist(LinkList H); int main() { LinkList H; H = createlist(); H = deleteeven(H); printlist(H); return 0; } LinkList createlist() { LinkList head = (LinkList)malloc(sizeof(LNode)); head->next = NULL; LinkList p = head; int x; scanf("%d", &x); while (x != -1) { LinkList q = (LinkList)malloc(sizeof(LNode)); q->data = x; q->next = NULL; p->next = q; p = q; scanf("%d", &x); } return head; } LinkList deleteeven(LinkList H) { LinkList p = H->next, q = H; while (p) { if (p->data % 2 == 0) { q->next = p->next; free(p); p = q->next; } else { q = p; p = p->next; } } return H; } void printlist(LinkList H) { LinkList p = H->next; while (p) { printf("%d ", p->data); p = p->next; } printf("\n"); }
时间: 2023-06-13 19:08:12 浏览: 156
这是一个使用链表实现删除链表中偶数元素的程序。程序包含三个函数:createlist,deleteeven和printlist。
函数createlist用于创建链表,用户输入一些整数,以-1作为结束符,将这些整数存储在链表中。
函数deleteeven用于删除链表中的偶数元素。它从链表头开始遍历链表,如果当前节点的值是偶数,则删除该节点。删除节点的方法是将该节点的前驱节点的指针指向该节点的后继节点,并释放该节点的内存空间。
函数printlist用于输出链表中的所有元素。
在main函数中,首先创建一个链表,然后调用deleteeven函数删除链表中的偶数元素,最后调用printlist函数输出链表中的所有元素。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef int DataType; #define QUEUESIZE 100 /* 队列的最大长度 */ /* 循环队列的定义 */ typedef struct { DataType items[QUEUESIZE]; int front,rear; /* 队头、队尾指针 */ }SqQueue; int InitSqQueue(SqQueue *Q)
这段代码只给出了函数声明,缺少函数实现部分。我假设这是一个初始化循环队列的函数,那么可以参考下面的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int DataType;
#define QUEUESIZE 100 /* 队列的最大长度 */
/* 循环队列的定义 */
typedef struct {
DataType items[QUEUESIZE];
int front, rear; /* 队头、队尾指针 */
} SqQueue;
/* 初始化循环队列 */
int InitSqQueue(SqQueue *Q) {
memset(Q->items, 0, sizeof(Q->items)); // 将队列元素初始化为0
Q->front = Q->rear = 0; // 初始化队头、队尾指针为0
return 1; // 初始化成功,返回1
}
```
在该函数中,我们使用了`memset`函数将队列元素初始化为0,使用`Q->front = Q->rear = 0`初始化队头、队尾指针为0。最后返回1表示初始化成功。
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef int DataType; void print(BiTree tree); BiTree CreatBiTree(); typedef struct Node{ DataType data; struct Node *LChild; struct Node *RChild; }BiTNode,* BiTree; void print(BiTree tree) { if(tree){ printf(tree->LChild); printf("%d",tree->data); printf(tree->RChild); } } BiTree CreatBiTree() { char ch; if(ch=='#') return NULL; else{ BiTree Node=((Node *)malloc(Node)); Node->LChild=CreatBiTree(); Node->data=ch; Node->RChild=CreatBiTree(); } } int main() { BiTree tree=NULL; tree=CreatBiTree(); print(tree); return 0; }找错误
这段代码中存在以下几个错误:
1. 缺少头文件定义,应该添加头文件:`#include "stdlib.h"`和`#include "string.h"`。
2. `BiTree`的定义应该在函数之前。
3. `CreatBiTree`函数中缺少输入,应该在函数内部添加一个读取输入字符的语句,例如:`scanf("%c",&ch);`。
4. 在`CreatBiTree`函数中,分配内存的语句应该是`Node=((BiTree)malloc(sizeof(BiTNode)));`,而不是`Node=((Node *)malloc(Node));`。
5. `print`函数中应该打印`tree->LChild`和`tree->RChild`的数据,而不是直接打印指针地址。应该改成:`print(tree->LChild); printf("%d",tree->data); print(tree->RChild);`。
下面是修改后的代码:
```
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *LChild;
struct Node *RChild;
} BiTNode,* BiTree;
BiTree CreatBiTree();
void print(BiTree tree);
void print(BiTree tree) {
if(tree){
print(tree->LChild);
printf("%d",tree->data);
print(tree->RChild);
}
}
BiTree CreatBiTree() {
char ch;
scanf("%c",&ch);
if(ch=='#')
return NULL;
else{
BiTree Node=((BiTree)malloc(sizeof(BiTNode)));
Node->LChild=CreatBiTree();
Node->data=ch;
Node->RChild=CreatBiTree();
return Node;
}
}
int main() {
BiTree tree=NULL;
tree=CreatBiTree();
print(tree);
return 0;
}
```
阅读全文