#include<stdio.h> struct Node{ int Data; struct Node *next; }*L; L *creat(){ L head,p,tail; int n; head=(L *)malloc(sizeof(L)); head->next=NULL; scanf("%d",&n); while(n!=-1){ p=(L)malloc(sizeof(L)); p->next=NULL; p->Data=n; if(head==NULL){ head=p; }else{ tail->next=p; }tail=p; scanf("%d",&n); } return head; } int main() { L head1,head2; head1=creat(); haed2=creat(); return 0; }
时间: 2024-04-06 21:32:51 浏览: 12
这是一个链表的创建代码,其中定义了一个结构体 Node,其中包含了一个整型变量 Data 和一个指向下一个结点的指针 next。creat 函数用于创建链表,输入一些整数,以 -1 结束,然后将这些整数存储在链表中,最后返回链表的头指针。在主函数中,调用 creat 函数两次,分别创建了两个链表 head1 和 head2。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> int i=0; typedef struct tree{ char data; struct tree *left,*right; }tree; tree* creat(char str[],tree *root){ printf("%c",str[i]); root=malloc(sizeof(tree)); root->data=str[i]; i++; if(root->data=='#'){ root=NULL; } else{ creat(str,root->left); creat(str,root->right); } return root; } int main(void){ char str[80]; while(scanf("%s",&str)!=EOF){ tree *T=NULL; T=creat(str,T); } return 0; }的错误
这段代码的错误在于,在 `creat` 函数内部递归构建树的时候,没有正确处理左右子树的指针。
具体来说,在递归调用 `creat` 函数时,应该将当前节点的左右子树指针分别传递给递归函数,如下所示:
```
creat(str, &(root->left));
creat(str, &(root->right));
```
此外,由于 `scanf` 函数读取字符串时不需要使用 `&`,因此应该将代码中的 `&str` 改为 `str`。
修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int i = 0;
typedef struct tree {
char data;
struct tree *left, *right;
} tree;
tree* creat(char str[], tree **root) {
printf("%c", str[i]);
*root = malloc(sizeof(tree));
(*root)->data = str[i];
i++;
if ((*root)->data == '#') {
(*root) = NULL;
} else {
creat(str, &((*root)->left));
creat(str, &((*root)->right));
}
return *root;
}
int main(void) {
char str[80];
while (scanf("%s", str) != EOF) {
tree *T = NULL;
T = creat(str, &T);
}
return 0;
}
```
给以下代码写注释:#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/shm.h> #define MAXSIZE 1024 struct shm{ int write; //记录读进程是否已经将内容读取 char buffer[MAXSIZE]; }; int main() { int shmid; struct shm *share; void *shmptr = NULL; if(shmid = shmget(0X44,MAXSIZE,0666|IPC_CREAT) < 0) perror("shmget"); if((shmptr = shmat(shmid,0,0)) == (void *)-1) perror("shmat"); printf("Read process:\n"); share = (struct shm *)shmptr; while(1) { if(share->write != 0) { if(!strncmp(share->buffer,"end\n",3) == 0) { printf("%s",share->buffer); share->write = 0; } else break; } } if(shmdt(shmptr) < 0) perror("shmdt"); exit(0); }//lijiadi202131060520
注释如下:
```c++
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/shm.h>
#define MAXSIZE 1024 // 定义共享内存的最大大小
// 定义共享内存结构体
struct shm{
int write; // 记录读进程是否已经将内容读取
char buffer[MAXSIZE];
};
int main() {
int shmid; // 共享内存的标识符
struct shm *share; // 共享内存的指针
void *shmptr = NULL;
// 创建共享内存
if(shmid = shmget(0X44,MAXSIZE,0666|IPC_CREAT) < 0)
perror("shmget");
// 连接共享内存
if((shmptr = shmat(shmid,0,0)) == (void *)-1)
perror("shmat");
printf("Read process:\n");
share = (struct shm *)shmptr;
// 循环读取共享内存中的数据
while(1) {
if(share->write != 0)
{
if(!strncmp(share->buffer,"end\n",3) == 0)
{
printf("%s",share->buffer);
share->write = 0; // 将读进程是否已经将内容读取的标志置为0
}
else
break; // 如果读取到了"end\n",则退出循环
}
}
// 断开共享内存
if(shmdt(shmptr) < 0)
perror("shmdt");
exit(0); // 退出程序
}
```