【飞秋公开源码】【指数压力支撑写在屏上源码】【qt控制单片机源码】c链表源码_c语言链表源码

时间:2024-12-26 02:59:59 分类:棋牌打升级源码 来源:modbus tcp源码购买

1.如何用C语言创建一个链表,链链表实现增、表源删、语言源码改、链链表查?

c链表源码_c语言链表源码

如何用C语言创建一个链表,表源实现增、语言源码飞秋公开源码删、链链表改、表源查?

       #include<stdio.h>

       #include<string.h>

       #include <malloc.h>

       //先定义一种student类型,语言源码表示一个学生的信息,如下:

       typedef struct student

       {

       int num; //表示学号

       char name[]; //表示姓名

       float score; //表示分数

       }student;

       //定义一种NODE类型,链链表表示一个结点信息,如下:

       typedef struct node

       {

       student st; //表示一个学生的表源信息

       struct node *next; //表示一个NODE类型的指针

       }NODE;

       //1、写出建立一个带头结点的语言源码线性链表的函数,其中每个结点包括学号、链链表指数压力支撑写在屏上源码姓名、表源分数三个数据域。语言源码函数形式如下:

       NODE *creat_link(int direction)

       {

       NODE *head,*p,*tail;

       int xh,i=1;

       if(direction==1) //当direction的值为1时,新建立的结点连到尾部

       {

       tail=head=(NODE *)malloc(sizeof(NODE));

       head->next=NULL;

       printf("请输入第%d个学生的学号:",i);

       scanf("%d",&xh);

       while(xh>0) //从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕

       {

       p=(NODE *)malloc(sizeof(NODE));

       p->st.num=xh;

       printf("请输入第%d个学生的qt控制单片机源码姓名:",i);

       scanf("%s",p->st.name);

       printf("请输入第%d个学生的成绩:",i);

       scanf("%f",&p->st.score);

       p->next=NULL;

       tail->next=p;

       tail=p;

       i=i+1;

       printf("请输入第%d个学生的学号:",i);

       scanf("%d",&xh);

       }

       }

       else if(direction==0) //当direction为0时,新建立的结点成为第一个结点

       {

       head=(NODE *)malloc(sizeof(NODE));

       head->next=NULL;

       printf("请输入第%d个学生的学号:",i);

       scanf("%d",&xh);

       while(xh>0) //从键盘临时输入学生情况,当输入的学号非正,则链表建立完毕

       {

       p=(NODE *)malloc(sizeof(NODE));

       p->st.num=xh;

       printf("请输入第%d个学生的姓名:",i);

       scanf("%s",p->st.name);

       printf("请输入第%d个学生的成绩:",i);

       scanf("%f",&p->st.score);

       p->next=head->next;

       head->next=p;

       i=i+1;

       printf("请输入第%d个学生的学号:",i);

       scanf("%d",&xh);

       }

       }

       return head;

       }

       //2、写出输出上述链表各结点数据域值的函数。该函数对应的函数需要一个形参,表示链表的最新网页在线客服系统源码头指针,形式如下:

       void print_link(NODE *head)

       {

       NODE *p;

       p=head->next;

       printf("%-s%-s%-s\n","学号","姓名","分数");

       while(p!=NULL)

       {

       printf("%-d%-s%-.1f\n",p->st.num,p->st.name,p->st.score);

       p=p->next;

       }

       //该函数能输出head所指的链表的所有结点值,输出形式如下:

       /*本函数输出线性表sq中所有数据,形式如下:

       学号 姓名 分数

        张三 .5

        李四 .7

       ……… ……… …….*/

       }

       //3、写出在链表中删除结点的函数

       int del_link(NODE *head,char name[])

       {

       NODE *p,*p1;

       p=head->next;

       p1=head;

       while(p!=NULL)

       {

       if(strcmp(p->st.name,name)!=0)

       {

       p1=p;

       p=p->next;

       }

       else

       {

       break;

       }

       }

       if(p!=NULL)

       {

       p1->next=p->next;

       free(p);

       return 1;

       }

       else

       {

       return 0;

       }

       //删除head所指的链表中,名字为name的结点,删除成功返回1,凡人修仙传传手游源码资源不成功返回0

       }

       //4、写出在链表中插入结点的算法

       int insert(NODE *head,student x,int wz)

       {

       NODE *p=head;

       int i=0,jg;

       if(wz<=0)

       {

       jg=0;

       }

       else

       {

       while(i<wz-1&&p!=NULL)

       {

       i++;

       p=p->next;

       }

       if(p==NULL)

       {

       jg=0;

       }

       if(i=wz-1)

       {

       //找到wz前面的节点,p指向它

       NODE *q;

       q=(NODE *)malloc(sizeof(NODE));

       q->st.num=x.num;

       strcpy(q->st.name,x.name);

       q->st.score=x.score;

       q->next=p->next;

       p->next=q;

       jg=1;

       }

       }

       return jg;

       //该函数能够在wz这个结点之前,插入一个新结点,新结点的数据域为x。插入成功返回1,不成功返回0。

       }

       //5、写出主函数,分别调用上面算法所对应的程序,建立链表,并输出链表的值。

       void main()

       {

       NODE *head; //定义指针变量head

       int wz; //表示插入位置

       char xm[];

       student st; //定义一个变量st,用来表示一个学生的信息

       head=creat_link(1);

       print_link(head); //调用函数建立链表,并把返回值送给head;

       //调用函数,输出链表中各个结点的值

       //输入一个学生的有关信息,送给变量st的有关成员

       printf("\n\n请输入要插入的位置:");

       scanf("%d",&wz); //输入wz的值

       printf("请输入要插入的学生的学号:");

       scanf("%d",&st.num);

       printf("请输入要插入的学生的姓名:");

       scanf("%s",st.name);

       printf("请输入要插入的学生的成绩:");

       scanf("%f",&st.score);

       //调用函数,在链表中把学生st的值作为一个结点插入,如果插入成功,输出新链表

       if(insert(head,st,wz)==1)

       {

       printf("\n插入成功,新表为:\n");

       print_link(head);

       }

       else

       {

       printf("插入不成功");

       }

       //调用函数,在链表中删除一个指定结点的值,如果删除成功,输出新链表

       printf("\n\n请输入要删除的学生的姓名:");

       getchar();

       gets(xm);

       if(del_link(head,xm)==1)

       {

       printf("\n删除成功,新表为:\n");

       print_link(head);

       }

       else

       {

       printf("删除不成功");

       }

       }