求写C语言 创建链表实例子。要最基本的 包括注释。
发布时间:2025-05-11 17:35:59 发布人:远客网络
一、求写C语言 创建链表实例子。要最基本的 包括注释。
1、程序分析:链表是动态分配存储空间的链式存储结构,
2、其包括一个“头指针”变量,其中第0个结点称为整个链表的头结点,头结点中存放一个地址,该地址指向一个元素,头结点一般不存放具体数据,只是存放第一个结点的地址。
3、链表中每一个元素称为“结点”,每个结点都由两部分组成:存放数据元素的数据域和存储直接后继存储位置的指针域。指针域中存储的即是链表的下一个结点存储位置,是一个指针。多个结点链接成一个链表。
4、最后一个结点的指针域设置为空(NULL),作为链表的结束标志,表示它没有后继结点。
5、使用结构体变量作为链表中的结点,因为结构体变量成员可以是数值类型,字符类型,数组类型,也可以是指针类型,这样就可以使用指针类型成员来存放下一个结点的地址,使其它类型成员存放数据信息。
6、在创建列表时要动态为链表分配空间,C语言的库函数提供了几种函数实现动态开辟存储单元。
7、malloc()函数实现动态开辟存储单元:
8、malloc函数原型为:void*malloc(unsigned int size);
9、其作用是在内存的动态存储区中分配一个长度为size的连续空间,函数返回值是一个指向分配域起始地址的指针(类型为void)。如果分配空间失败(如,内存空间不足),则返回空间指针(NULL)
10、/*上面只是定义了一个结构体类型,并未实际分配内存空间
11、只有定义了变量才分配内存空间*/
12、/*head用来标记链表,p1总是用来指向新分配的内存空间,
13、p2总是指向尾结点,并通过p2来链入新分配的结点*/
14、p1=(structLNode*)malloc(sizeof(structLNode));
15、/*动态分配内存空间,并数据转换为(structLNode)类型*/
16、printf("请输入链表中的第%d个数:",i);
17、if(head==NULL)/*指定链表的头指针*/
18、p2->next=NULL;/*尾结点的后继指针为NULL(空)*/
19、returnhead;/*返回链表的头指针*/
20、printf("请输入链表的长度:/n");
21、q=creat(n);/*链表的头指针(head)来标记整个链表*/
22、while(q)/*直到结点q为NULL结束循环*/
23、printf("%d",q->data);/*输出结点中的值*/
24、q=q->next;/*指向下一个结点*/
二、c语言链表插入法求解下列问题
1、一、链表创建:根据输入的数字,动态创建任意多个节点插入链表。(题目规定n<=40,如不想使用malloc动态申请内存,需直接定义最大上限40个节点)。
2、二、链表排序:交换节点内容(不是地址),保留链表指针的值(*next的值)。
3、三、打印链表:利用链表指针遍历链表。
4、四、对动态申请的链表地址空间释放(在本程序中创建后程序就结束了,即使不写free释放,结束后也会释放。但在复杂程序中调用创建,后续还有代码,需像我代码中写函数动释放不用的内存,避免浪费)。
5、NST*insert2List(int num);//根据数字创建节点(动态),插入链表(首次自动生成头节点),成功返回头节点,失败返回NULL。
6、void showList(NST*nsthead);//打印链表
7、void px(NST*nsthead);//链表排序
8、void freeList(NST*nsthead);//释放链表内存
9、 nums=(int*)malloc(sizeof(int)*n);
10、 nsthead=insert2List(nums[i++]);
11、 while(nsthead->next!=NULL)
12、 printf("%d",nsthead->next->num);
13、 NST*nt1=NULL,*nt2=NULL,ntTemp,*nextSave=NULL;
14、 if(nt1->num>nt2->num)
15、 static NST*nsthead=NULL,*nstTail=NULL;
16、 nstNew=(NST*)malloc(sizeof(NST));
17、 nsthead=(NST*)malloc(sizeof(NST));
三、下列代码用C语言求单链表的长度为什么不对
1、很高兴为楼主解答,首先楼主是想头插入法创建单链表,然后按输入的逆顺序输出,然后尾插入法创建单链表,然后按输入的顺序输出,接着输出第一个链表的长度和第二个链表的长度。但楼主犯了一个简单的错误用getchar来判断是否输入来创建链表,因为空字符也会作为字符来判断,但不是'a'字符(包括回车)也会创建一个结点,这就是为什么楼主的链表的长度是2倍的原因,楼主可以通过输入的数据来判断是否创建结点,比如说把int ch;输入的ch不为0创建一个结点,一直下去,直到输入的数据为0,替楼主的代码稍作了修改,如果可以,希望楼主采纳!!!!
2、 head=(linklist*)malloc(sizeof(linklist));
3、 p=(linklist*)malloc(sizeof(linklist));
4、 linklist*head,*p,*r;intch;//修改
5、 head=(linklist*)malloc(sizeof(linklist));
6、 p=(linklist*)malloc(sizeof(linklist));
7、 printf("%-3d",p->data);//修改