问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言链表创建和输入

发布网友 发布时间:2022-04-26 07:15

我来回答

2个回答

热心网友 时间:2023-10-30 22:19

敢问楼主,为何要两个链表?你的需求一个链表完全搞定了啊,第二个链表是用来做什么的?

#include<stdio.h>                                                               
#include<stdlib.h>                                                              
struct student{                                                                 
    char name[10];                                                                 
    char id[10];                                                                   
    struct student *next;                                                          
};                                                                              
int main(void)                                                                  
{                                                                               
   int n;                                                                       
   printf("请输入要学生个数,以回车结束!\n");                                  
   scanf("%d",&n);                                                              
   struct student *head=(struct student *)malloc(sizeof(struct student));       
   head->next=NULL;                                                             
   struct student *end=head;                                                    
   for(int i=0;i!=n;i++)                                                        
   {                                                                            
           struct student*p=(struct student *)malloc(sizeof(struct student));         
           p->next=NULL;                                                              
           printf("第%d个学生信息:\n",i+1);                                          
           printf("  姓名:");                                                        
           scanf("%s",&p->name);                                                      
           printf("  学号:");                                                        
           scanf("%s",&p->id);                                                        
           end->next=p;                                                               
           end=p;                                                                     
   }                                                                            
   for(struct student *p=head->next;p!=NULL;p=p->next)                          
   {                                                                            
           printf("姓名:%s  学号:%s \n",p->name,p->id);                               
   }                                                                            
}

截图如下:

追问题目就是这样要求的,因为下一问是要让链表合并

追答

下面代码包含:两个链表输入、输出、合并(《知道》恶心的*字数,无法继续回答,只能附件了)

附件也上传不成功...

只能截图给你了:



热心网友 时间:2023-10-30 22:19

#include "link.h"
//实现类似于strlen
struct string_linkinfo BL_Stringlen(BLString *link)
{
struct string_linkinfo st_string = {0, 0};
char *p;
Block *pnode = NULL;
if(NULL == link){
printf("Invalid arg...\n");
return st_string;
}
//链表为空
if(NULL == link->head){
return st_string;
}
else{
pnode = link->head;
while(pnode != link->tail)
{
st_string.length += N;
st_string.count_node++;

pnode = pnode->next;
}//当while循环执行完后,pnode一定是最后一个节点
p = pnode->buffer;
st_string.count_node++;
while('\0' != *p)
{
st_string.length++;
p++;
}
}
return st_string;
}

//实现类似于strcmp
int BL_Stringcmp(BLString *link1, BLString *link2)
{
assert(NULL != link1 && NULL != link2);//断言
int i;
Block *pnode1 = link1->head;
Block *pnode2 = link2->head;
while(pnode1 != link1->tail && pnode2 != link2->tail)
{
for(i = 0; i < N; i++)
{
if((pnode1->buffer)[i] != (pnode2->buffer)[i])
return (pnode1->buffer)[i] - (pnode2->buffer)[i];
}
pnode1 = pnode1->next;
pnode2 = pnode2->next;
}
return strcmp(pnode1->buffer, pnode2->buffer);
}
//实现类似于strcpy
/*BLString *BL_Stringcpy(BLString *link1, BLString *link2)
{

}*/
//类似于strcat
BLString *BL_Stringcat(BLString *link1, BLString *link2)
{
//函数入口检测
if(NULL == link1 || NULL == link2)
{
printf("Invalid arg...\n");
return NULL;
}
if(NULL == link1->head){
link1->head = link2->head;
}
else//都不为空
{
int i, tmp = 0;
Block *pnode1 = link1->head;
Block *pnode2 = link2->head;
while(pnode1 != link1->tail)//将pnode1定位到末尾
pnode1 = pnode1->next;
//先看看缺多少个字符
tmp = strlen(pnode1->buffer);
//尾首链接
pnode1->next = pnode2;
while(pnode2 != link2->tail)
{
for(i = 0; i < N - tmp; i++)
(pnode1->buffer)[tmp + i] = (pnode2->buffer)[i];
for(i = 0 ; i < tmp; i++)
(pnode2->buffer)[i] = (pnode2->buffer)[N-tmp+i];
pnode1 = pnode1->next;
pnode2 = pnode2->next;
}
if(strlen(pnode2->buffer) < N-tmp)
{
for(i = 0; i < strlen(pnode2->buffer); i++)
(pnode1->buffer)[tmp + i] = (pnode2->buffer)[i];

(pnode1->buffer)[tmp+i] = '\0';
free(pnode2);
link1->tail = pnode1;
}
else{
for(i = 0; i < N - tmp; i++)
(pnode1->buffer)[tmp + i] = (pnode2->buffer)[i];
strcpy(pnode2->buffer, (pnode2->buffer)+(N-tmp));
link1->tail = pnode2;
}
link1->tail->next = NULL;
}

return link1;
}
void BL_Printstring(BLString *plink)
{
int i;
if(NULL == plink){
printf("Invalid arg...\n");
return ;
}
if(NULL == plink->head){
printf("The string is empty...\n");
return ;
}
Block *pnode = plink->head;
while(pnode != plink->tail)
{
for(i = 0; i < N; i++)
printf("%c", (pnode->buffer)[i]);

pnode = pnode->next;
}
printf("%s\n", pnode->buffer);

return;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...换手机号显示你以设置拒收微信登陆.换绑.注册短信怎么解决? 伊拉克战争是哪些国家发动的?请快回答,我有急用! 二零零三年三月谁发动了对伊拉克的战争 西门子、美的、容声三个门的冰箱那个牌子又省电又实用? 海尔冰箱BCD-206 SCFM 放3档工作多长时间 ,停多长时间正常 海尔BCD-206SCFM基本参数 6年级上册数学练习册百分数50到53页答案 小学数学六年级(上):帮你学数学口算练习册2008年印刷版信息 小学数学六年级(上):帮你学数学口算练习册2010年印刷版信息 小学六年级数学上册百分数练习册《课堂作业本》答案64面第2题 C语言链表的输入 《食品安全法实施条例》规定,餐饮服务许可的有效期为几年? 餐饮服务许可的有效期为几年? 餐饮服务许可证的有效期为几年? 美的电饭煲显示“e”是怎么回事? 餐饮服务许可证的有效期是多少年? 美的电压力锅坏了怎么修理 度蜜月是什么意思啊??老婆说结婚要去度蜜月 是什么 旅行结婚和度蜜月有什么不同吗? 去度蜜月英文怎么说 你觉得新婚之后一定要去度蜜月吗? ? 关于“度蜜月”的句子有哪些? 度蜜月一般几天最好呢? 新婚夫妻要度蜜月吗? 度蜜月是多久 度蜜月是什么意思啊 度蜜月是为什么? 度蜜月一般做什么? 度蜜月什么意思 和老公要去度蜜月了,蜜月怎么过才最浪漫呢? c语言实现链表的输入 c语言链表的输入求指导,纠结了好久 C语言链表的输入输出 C语言数据结构 如何建立单向循环链表并且输入值 c语言链表输入问题 C语言链表输入输出 C语言,为什么在输入链表数据的时候总是报错? 关于C语言链表插入数值的问题 C语言 建立链表输入学生信息然后输出 哪里错了. C语言单向链表的创建,输入,插入和删除的实现 一道c语言链表输入问题菜鸟题 C语言链表输。数据输入完成了,输出的时候只能输出最后一个,求指导:) C语言链表输入打印多项式 c语言 双向链表的初始化和输入 C语言链表输入并显示的问题,急啊!! 厦门法院强化诉调对接有什么作用? 市级法院分哪些部门(科室) 什么是中国民生银行消保委员会报告事项工作程序? 研究农民工犯罪的理由或意义是什么? 镇江法院下午上班时间