×

链表c语言next date

链表c语言next date(数据结构c语言版链表问题)

admin admin 发表于2024-01-17 13:34:38 浏览32 评论0

抢沙发发表评论

这篇文章给大家聊聊关于链表c语言next date,以及数据结构c语言版链表问题对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

数据结构c语言版链表问题

#include 《stdio.h》#include 《stdlib.h》#include 《malloc.h》struct data { char num; //停不下来有可能是串定义的小了,输入的数据大了,导致内存混乱!8个数据的串要定义9个空间,给’\0’留个位置 char name; char gender; int score ;} ;typedef struct aa{ struct data date; struct aa *next ;} sequenlist ;void createList(sequenlist *L)// 优化了一下这个函数{ int n,i; sequenlist *p1; sequenlist *p2; p1=L; //p1指向表头,所以的数据均在此表头后插入printf("有几位学生?请输入:\n"); scanf("%d",&n);printf("以下请输入这%d位学生的信息:\n",n); for(i=1;i《=n;++i) { printf("第%d位学生:",i); printf("\n学号(8) 姓名(8) 性别 成绩\n"); fflush(stdin); p2=(sequenlist *)malloc(sizeof(sequenlist));//p2是新结点,直接将数据读入 scanf("%s%s%s%d",p2-》date.num,p2-》date.name,p2-》date.gender,&p2-》date.score); p1-》next=p2; //将新结点加到表尾 p1=p2;//新结点成为新的表尾 } p1-》next=NULL; //置表结束}void printList(sequenlist *L){ int i; i=0; printf("\n学号(8) 姓名(8) 性别 成绩\n"); printf("-------------------------------------------\n"); L=L-》next; while(L!=NULL) { i++; printf("第%d位学生:",i); printf("%s,%s,%s,%d\n",L-》date.num,L-》date.name,L-》date.gender,L-》date.score); printf("------------------------------------------------------------------\n"); L=L-》next; }}int main(){sequenlist *head=(sequenlist *)malloc(sizeof(sequenlist) ); //这个很重要,建立一个非数据的头结点createList(head);printList(head);return 0;}有几位学生?请输入:2以下请输入这2位学生的信息:第1位学生:学号(8) 姓名(8) 性别 成绩1 hello male 100第2位学生:学号(8) 姓名(8) 性别 成绩2 world female 95学号(8) 姓名(8) 性别 成绩-------------------------------------------第1位学生:1,hello,male,100------------------------------------------------------------------第2位学生:2,world,female,95------------------------------------------------------------------

C语言 创建带头结点的链表

单链表的生成有2种方式:头插法和尾插法。1、头插法/********************************************************************** 函数名称:linklist *CreateLinklistHead()* 函数功能:利用头插法创建链表* 参 数:无* 返 回 值:创建完链表后的链表头结点* 说 明:无*********************************************************************/extern linklist *CreateLinklistHead(){int x, i, nodeNum;linklist *head, *temp; // 头结点与临时结点head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点head-》next = NULL; // 给表头结点的指针域赋值printf("请输入链表中结点的个数:");scanf("%d", &nodeNum);for(i=1; i《=nodeNum; i++){printf("请输入第 %d 个结点的数据:", i);scanf("%d", &x);temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点temp-》data = x; // 对新结点的数据域赋值// 将新结点插到头结点之后temp-》next = head-》next; head-》next = temp;}return head; // 返回新建链表的头结点}2、尾插法/********************************************************************** 函数名称:linklist *CreateLinklistRear()* 函数功能:利用尾插法创建链表* 参 数:无* 返 回 值:创建完链表后的链表头结点* 说 明:无*********************************************************************/extern linklist *CreateLinklistRear(){int x, i, nodeNum;linklist *head, *rear, *temp; // 定义头结点、尾结点和临时结点head = (linklist *)malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据head-》next = NULL; // 将表头结点的指针域赋值为NULLrear = head; // 将表头结点赋值给表尾结点printf("请输入链表中结点的个数:");scanf("%d", &nodeNum);for(i=1; i《=nodeNum; i++){printf("请输入第 %d 个结点的数据:", i);scanf("%d", &x);temp = (linklist *)malloc(sizeof(linklist)); // 生成新的结点temp-》data = x; // 新增结点的数据域temp-》next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)rear-》next = temp; // 使前一个结点指向新增结点(head-》next=temp)rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head-》next)}//rear-》next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)return head; // 返回头结点}

c语言链表插入问题,pta提交有个段错误,请各位大佬帮忙找找茬,感激!

看到你这问题,你时间快到了吧。

你变量命名很随意,没有备注,逻辑读起来很费时间,另外i变量没使用,所有指针变量都没有初值,建议都给初值NULL否则会有野指针。

直接模仿你的结构写一个吧。

#include 《stdio.h》#include 《stdlib.h》struct date{    int num;    struct date *next;};int main(){    int n,m,num;    struct date *head=NULL,*hSave=NULL,*tail=NULL,*newDate=NULL;    scanf("%d",&n);//第一行有序输入    while(n--)//根据第二行输入生成链表    {        scanf("%d",&m);        newDate=(struct date *)malloc(sizeof(struct date));        newDate-》num=m;        newDate-》next=NULL;        if(!newDate)            return 1;        if(head==NULL)        {            head=(struct date *)malloc(sizeof(struct date));            if(!head)                return 1;            head-》next=newDate;        }        else            tail-》next=newDate;        tail=newDate;    }    scanf("%d",&num);//第三行输入 插入    newDate=(struct date *)malloc(sizeof(struct date));    newDate-》num=num;    newDate-》next=NULL;    hSave=head;    while(hSave-》next)//遍历链表    {        if(hSave-》next-》num《=num && (hSave-》next-》next==NULL || hSave-》next-》next-》num》=num))//当前节点数值小于等于输入并且(下一节点为空或下一个节点数值大于等于输入)        {            newDate-》next=hSave-》next-》next;            hSave-》next-》next=newDate;            break;        }        hSave=hSave-》next;    }    while(head-》next)//最终输出打印    {        printf("%d ",head-》next-》num);        head=head-》next;    }    return 0;}

数据结构题目,建立一个10个节点的链表,然后删除第5个节点,查找第7个节点并打印,c语言啊!!求解

#include 《stdio.h》#include 《stdlib.h》#include 《time.h》typedef struct date{int date;struct date *next;}Date;void main(){Date *head=NULL,*p1,*p2,*p;int i;srand(time(NULL));//使用随机数为每个节点赋值p2=p1=(Date *)malloc(sizeof(Date));p1-》date=rand()%20+1;for(i=0;i《9;i++)//建立链表 { if(head==NULL)head=p1; else { p2=p1; } p1=(Date *)malloc(sizeof(Date)); p1-》date=rand()%20+1; p2-》next=p1; }p1-》next=NULL;//链表建立完成printf("下面是刚才建立的链表:\n");p=head;while(p!=NULL) //打印链表 { printf("%d ",p-》date); p=p-》next; } //打印链表完成printf("\n下面是删除第5个节点的链表:\n");p1=p2=head; for(i=0;i《4;i++)//找到第五个节点p1,p2自相第四个节点,也就是p2-》next=p1 { p2=p1; p1=p1-》next; } p2-》next=p1-》next;//删除第五个节点,即让第四个节点指向第六个节点p=head;while(p!=NULL) //打印删除第五个节点后的链表 { printf("%d ",p-》date); p=p-》next; } //打印链表完成p=head;for(i=0;i《6;i++)//找到第七个节点p { p=p-》next; } printf("\n第七个节点的内容是:");printf("%d\n",p-》date); }

C语言,编写程序已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(date)和指

#include《stdio.h》#include《stdlib.h》typedef struct _Node{int data;_Node *next;}Node,*List;int getMax_Value(List head){if (head-》next == NULL){printf("链表中没有节点.\n");exit(-1);}Node *ptr = head-》next;int max = ptr-》data;while (ptr-》next != NULL){ptr = ptr-》next;if (ptr-》data 》 max){max = ptr-》data;}}return max;}Node* getMax_Address(List head){if (head-》next == NULL){printf("链表中没有节点.\n");exit(-1);}Node *ptr = head-》next;Node *max_address = ptr;while (ptr-》next != NULL){ptr = ptr-》next;if (ptr-》data 》 max_address-》data){max_address = ptr;}}return max_address;}List creatList(int num)//num为创建节点个数{List head = (Node*)malloc(sizeof(Node));head-》data = 0;head-》next = NULL;Node *ptr = head;Node *node = NULL;int data;while (num){printf("请输入节点则值:");scanf("%d", &data);node = (Node*)malloc(sizeof(Node));node-》data = data;node-》next = NULL;ptr-》next = node;ptr = node;head-》data++;num--;}return head;}void freeList(List head){Node* ptr = head;while (head){head = ptr-》next;free(ptr);ptr = head;}}int main(){List head=creatList(5);printf("链表的最大值为:%d\n", getMax_Value(head));printf("链表最大值的地址为:0x%x,%d\n", getMax_Address(head), (getMax_Address(head))-》data);freeList(head);return 0;}

c语言中s->data=e是什么意思啊,有谁能形象说明,还有next

s-》data说明 s 是一个结构体 ,data 是结构体的一个元素 s-》data = e 将 e 赋值给 结构体s下的datanext ? 你这里应该是学链表吧 ,next 一般指向链表下一个结构体的地址

C语言,我想要录入10本图书信息,应该怎么建链表谢谢啦

录入我写了函数直接赋值的,没写键盘输入,你想写自己加吧

下面是代码,我详细注释了。

#include《stdio.h》#include《malloc.h》#include《string.h》typedef struct book//图书结构我随便设了几个成员,你自己改{   char name;   char type;   int date;   struct book *next;}bk;int main (){    bk *addBook(bk *bkTail,char *vName,char *vType,int vDate);    bk *bk0=(bk *)malloc(sizeof(bk));//申请一个首节点指针内存空间    bk *bkTail=bk0;//定义一个末尾节点指针    bk *bkHead=(bk *)malloc(sizeof(bk));    bkHead-》next=bk0;//定义一个用于遍历的头节点不放数据  单纯其成员链表指针指向首节点    bk0-》name=0;    //------------录入我就不写了,就试放4个图书测试,你要自己加吧    bkTail=addBook(bkTail,"C语言从入门到入土","IT/科学",20171220);    bkTail=addBook(bkTail,"jave从入门到入土","IT/科学",20171225);    bkTail=addBook(bkTail,"数据库从入门到入土","IT/科学",20171226);    bkTail=addBook(bkTail,"学会自己长大","教育",20171230);    printf("图书信息已录入\n");    //--------------------打印    printf("开始打印图书库存信息\n");    while(bkHead-》next!=NULL)    {        printf("图书名:%s、图书类别:%s、入库日期:%d\n",bkHead-》next-》name,bkHead-》next-》type,bkHead-》next-》date);        bkHead=bkHead-》next;    }    return 0;}bk *addBook(bk *bkTail,char *vName,char *vType,int vDate)//创建1个新的图书链表节点 连接在链表最后 并返回当前录入节点//参数1 尾节点地址; 其他参数为录入的成员数据{    if(bkTail-》name==0)//首次录入    {        strcpy(bkTail-》name,vName);        strcpy(bkTail-》type,vType);        bkTail-》date=vDate;        bkTail-》next=NULL;        return bkTail;    }    else    {        bk *newBk=(bk *)malloc(sizeof(bk));        strcpy(newBk-》name,vName);        strcpy(newBk-》type,vType);        newBk-》date=vDate;        newBk-》next=NULL;        bkTail-》next=newBk;        return newBk;    }}

C语言如何用动态链表储存数据

单链表,双链表,堆 都可以,不过看您要存储什么数据 以单链表为例: 定义一个节点结构 typedef struct LNode{ ElementType date; struct Lnode *next; }Lnode; 然后用malloc开辟需要的节点空间,把数据存进去就可以了 p = (Lnode) malloc (sizeof(Lnode)); //开辟一个节点,p为所开辟空间的指针 至于查找,从头节点开始q = p-》next ;一个个查就行了。

C语言链表插入

char data?结点data是字符串? 抽时间帮你写了一个有什么不合要求的地方你自己改改吧#include 《stdio.h》#include 《string.h》#include 《malloc.h》typedef struct Lnode{char *data;struct Lnode *next;}Lnode, *LinkList;void CreateList(LinkList &L, char *buff){ int flag=0, j=0; int len=strlen(buff); L=(Lnode *)malloc(sizeof(Lnode)); L-》next=NULL; LinkList q=L; for(int i=0;i《len;i+=4) { j=0; LinkList p=(Lnode *)malloc(sizeof(Lnode)); q-》next=p; p-》next=NULL; p-》data=(char *)malloc(sizeof(char)*5); while(j《4) { p-》data; } p-》data=’\0’; q=q-》next; }}//初始化链表Lvoid TraverseList(LinkList L){ LinkList p; p=L-》next; while(p) { printf("%s",p-》data); p=p-》next; } printf("\n");}//遍历链表Lvoid InsertList(LinkList &L,int i,char *ins){ LinkList p=L; int temp=0; i/=4; while(temp《i) { p=p-》next; temp++; } if(!p) printf("Insert Failed"); LinkList s=(Lnode *)malloc(sizeof(Lnode)); s-》data=(char *)malloc(sizeof(char)*5); strcpy(s-》data, ins); s-》next=p-》next; p-》next=s;}//在单链表L的第i个元素继续插于入insvoid main(){ fflush(stdin); char buff; int m; printf("Plz type in the string:"); gets(buff); LinkList L; CreateList(L, buff); printf("The linklist L is : "); TraverseList(L); //printf("%d", flag); printf("where to insert (m):"); scanf("%d", &m); printf("what to insert:"); fflush(stdin); scanf("%s", &ins); //gets(ins); InsertList(L, m, ins); TraverseList(L);}

c语言数据结构链表问题!肯求大神解答!

链表有种:带头结点的和不带头结点的。带头结点的写程序比较简单、明了,它用一个结点作为头结点,不算链表数据,主要用来指出第一个数据结点的位置,建立、遍历和删除链表时,主函数操作比较方便,不用考虑头结点的变化(在子函数中完成第一个数据结点的位置变化,而主函数不用考虑)。而在不带头结点的链表中,主函数总要考虑第一个数据结点的变化,必须通过参数或返回值带回这个值的变化,初学者总会在这上面犯错。以上你的程序大体正确,有一个错误,就是p的变量类型不对,应该是struct node *p;p应该是个结点指针。可见你的程序是不带头结点的链表,因为你将第一个结点的数据所算作链表数据了。对于带头结点的链表的遍历,第一个数据结点是p=head-》next ;

OK,关于链表c语言next date和数据结构c语言版链表问题的内容到此结束了,希望对大家有所帮助。