C语言数据结构作业 调试不通过 求高手解答

发布网友 发布时间:2022-04-25 20:41

我来回答

4个回答

热心网友 时间:2022-06-17 05:58

请仔细对比!!!,你的程序有很多不对的地方。看我是哪些地方和你不一样的!!!

此程序我已经调试并测试通过了。
如果你要运行这个程序,注意把汉字全部去掉!!!
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>

typedef struct node
{
int data;
node *next;
}node;//你结构体定义错误!!!!

struct node *creat(int num)
{
struct node *p,*q,*head;
int i;
p = (struct node *)malloc(sizeof(struct node));
head = p;
q = p;
for(i=0;i<num-1;i++)
{
p = (struct node *)malloc(sizeof(struct node));
q->next = p;
q = p;
}
p->next = NULL;
return head;
}

void input(struct node *head)
{
struct node *p;
p = head;
while(p->next != NULL)
{
scanf("%d",&(p->data));
p = p->next;
}
scanf("%d",&(p->data));
}

void output(struct node *head)
{
struct node *q;
q = head;
while(q->next != NULL)
{
printf("%d ",q->data);
q = q->next;
}
printf("%d\n",q->data);
}

void main()
{
struct node *A,*B,*C;
struct node *head=NULL;//先给一个初始值,头结点只赋值一次。用空判断
int a,b,i;

printf("请输入A链表的元素个数:\n");
scanf("%d",&a);
A = creat(a);
printf("请按从小到大的顺序输入A链表元素:\n");
input(A);
output(A);
printf("请输入B链表的元素个数:\n");
scanf("%d",&b);
B = creat(b);
printf("请按从小到大的顺序输入B链表元素:\n");
input(B);
output(B);

for(;;)//退出循环用空来判断
{
if(A!= NULL && B!= NULL)
{

if(A->data < B->data)
{
if(!head)//判断头结点指向哪个,只执行一次!! 下同
{
head=A;
C=head;
}
else
{
C->next=A;//此处应该这样;
C=C->next;
}

A = A->next;
}
else if(A->data == B->data)
{
if(!head)
{
head=A;
C=head;
}

else
{
C->next=A;
C=C->next;
}
A = A->next;
B = B->next;
}
else if(A->data > B->data)
{
if(!head)
{
head=B;
C=head;
}

else
{
C->next=B;
C=C->next;
}

B = B->next;
}
}
else
break;//跳出循环

}
//以下代码从循环拿出来,因为下面代码只执行一次就够了,没必要循环
if(A == NULL && B == NULL)
{
}

else if(A != NULL && B == NULL)
{
C ->next= A;//只需要这样就行了,。。。
}

else if(A == NULL && B != NULL)
{
C ->next= B;
}

printf("AB链表合并后的链表C中各元素依次为:\n");
output(head);//必须先输出再释放,不然你节点都释放了,怎么输出啊!!!
free(head);//此时不能free(A),free(B),因为此时A,B,节点的次序已经完全打乱了,节点已经完全链接到head了,只需要释放head就行了。

}
如有不对,欢迎赐教!!!

热心网友 时间:2022-06-17 05:59

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>

#define MYPORT 3490
#define BACKLOG 10
#define MAXDATASIZE 1024 /

int sockfd,new_fd;
pthread_t accthread,recthread;

void recmessage(void)
{
while(1)
{
int numbytes;
char buf[MAXDATASIZE];

if((numbytes=recv(new_fd,buf,MAXDATASIZE,0))==-1)
{
perror("recv");
exit(1);
}
buf[numbytes]='\0';

if(strcmp(buf,"exit")= =0)
{
printf("Client is closed\n");
close(new_fd);
close(sockfd);
exit(1);
}
printf("Client:%s\n",buf);
}
}

void acceptconnect()
{
struct sockaddr_in their_addr;
int sin_size;
sin_size=sizeof(struct sockaddr_in);

if((new_fd=accept(sockfd,(struct sockaddr*) & their_addr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
printf("server:got connection from %s\n",inet_ntoa(their_addr.sin_addr));

if((pthread_create(&recthread,NULL,(void *)recmessage,NULL))!=0)
{
printf("Create thread error!\r\n");
exit(1);
}
}

int main(void)
{
struct sockaddr_in my_addr;

/*创建一个socket,赋值给sockfd,创建成功则继续,否则输出出错信息并结束运行*/

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}

my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(MYPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);

/*将IP地址和端口信息绑定到前面创建的socket上,绑定成功则继续,否则输出出错信息并结束运行*/
if (bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}

/*监听连接信号,和accept合用,并定义最大连接数,监听成功则继续,否则输出出错信息并结束运行*/

if (listen (sockfd,BACKLOG)= =-1)
{
perror("listen");
exit(1);
}

if((pthread_create(&accthread,NULL,(void *)acceptconnect,NULL))!=0)
{
printf("Create thread error!\r\n");
exit(1);
}
/*循环等待客户端的连接消息*/
while(1)
{
char msg[MAXDATASIZE];

scanf("%s",msg);

if (send(new_fd,msg,strlen(msg),0)= =-1)
{
perror("send");
close(new_fd);
exit(1);
}

/*如果输入的是exit,则结束运行*/

if (strcmp(msg,"exit")= =0)
{
printf("Byebye!\n");
close(new_fd);
close(sockfd);
exit(1);
}
}
return(0);

}
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 3490
#define MAXDATASIZE 1024

int sockfd;
pthread_t recthread;

void recmessage(void)
{
while(1)
{
int numbytes;
char buf[MAXDATASIZE];

if((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1)
{
perror("recv");
exit(1);
}
buf[numbytes]='\0';

if(strcmp(buf,"exit")= =0)
{
printf("Server is closed\n");

close(sockfd);
exit(1);
}
printf("Server:%s\n",buf);
}
}

int main (int argc,char *argv[])
{

struct hostent *he;
struct sockaddr_in their_addr;

/*若不是两个传入参数则提示出错信息,并结束运行*/
if (argc!=2)
{
fprintf(stderr,"usage:client hostname\n");
exit(1);
}
/*从第二个传入参数获取主机信息*/
if ((he=gethostbyname(argv[1]))==NULL)
{
perror("gethostbyname");
exit(1);
}
/*创建一个socket,赋值给sockfd,创建成功则继续,否则输出出错信息并结束运行*/
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
their_addr.sin_family=AF_INET;
their_addr.sin_port=htons(PORT);
their_addr.sin_addr=*((struct in_addr *)he->h_addr);
bzero(&(their_addr.sin_zero),8);

/*向服务器发送连接请求,连接成功则继续,否则输出出错信息并结束运行*/
if (connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr))==-1)
{
perror("connect");
exit(1);
}

if((pthread_create(&recthread,NULL,(void *)recmessage,NULL))!=0)
{
printf("Create thread error!\r\n");
exit(1);
}

/*循环等待客户端的连接消息*/
while(1)
{
char msg[MAXDATASIZE];

scanf("%s",msg);

if (send(sckfd,msg,strlen(msg),0)= =-1)
{
perror("send");
close(sockfd);
exit(1);
}

/*如果输入的是exit,则结束运行*/

if (strcmp(msg,"exit")= =0)
{
printf("Byebye!\n");
close(sockfd);
exit(1);
}
}
return(0);

}

热心网友 时间:2022-06-17 05:59

哎!!
typedef struct node
{
int data;
struct node*next;
}node,*nodeptr;
算法有没有错没看。这样改后语法是没问题了。

热心网友 时间:2022-06-17 06:00

typedef struct node
{
int data;
struct *next;-
}(这里打;号)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com