发布网友 发布时间: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;-
}(这里打;号)