1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct node{
5 char data;
6 struct node *next;
7 }NODE, *PNODE;
8
9 //创建链表
10 PNODE create_list(void){
11 int len; //存放链表的长度
12 int i; //循环变量
13 int val; //用来临时存放用户输入的结点的值
14
15 PNODE list;
16 PNODE pHead = (PNODE)malloc(sizeof(NODE)); //分配一个头结点
17
18 if(NULL == pHead){
19 printf("Memory allocation farlure");
20 exit(-1);
21 } else {
22 PNODE pTail = pHead;
23 pHead -> next = NULL;
24 printf("please input the length of list: "); //需要一个指针始终指向链表结尾
25 scanf("%d", &len);
26 for(i = 0; i < len; i++){
27 PNODE p = (PNODE)malloc(sizeof(NODE));
28 if(NULL == p){
29 printf("memory allocation failure");
30 exit(-1);
31 } else {
32 printf("please input the value of list: ");
33 scanf("%d", &val);
34 p -> data = val;
35 pTail -> next = p;
36 p -> next = NULL;
37 pTail = p;
38 }
39 }
40 }
41 return pHead;
42 }
43
44 //查询链表的长度
45 int queryLen(PNODE head){
46 int len = 0;
47 if(NULL == head){
48 printf("链表无效");
49 } else {
50 while(NULL != head -> next){
51 len+=1;
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef struct node{
5 char data;
6 struct node *next;
7 }NODE, *PNODE;
8
9 //创建链表
10 PNODE create_list(void){
11 int len; //存放链表的长度
12 int i; //循环变量
13 int val; //用来临时存放用户输入的结点的值
14
15 PNODE list;
16 PNODE pHead = (PNODE)malloc(sizeof(NODE)); //分配一个头结点
17
18 if(NULL == pHead){
19 printf("Memory allocation farlure");
20 exit(-1);
21 } else {
22 PNODE pTail = pHead;
23 pHead -> next = NULL;
24 printf("please input the length of list: "); //需要一个指针始终指向链表结尾
25 scanf("%d", &len);
26 for(i = 0; i < len; i++){
27 PNODE p = (PNODE)malloc(sizeof(NODE));
28 if(NULL == p){
29 printf("memory allocation failure");
30 exit(-1);
31 } else {
32 printf("please input the value of list: ");
33 scanf("%d", &val);
34 p -> data = val;
35 pTail -> next = p;
36 p -> next = NULL;
37 pTail = p;
38 }
39 }
40 }
41 return pHead;
42 }
43
44 //查询链表的长度
45 int queryLen(PNODE head){
46 int len = 0;
47 if(NULL == head){
48 printf("链表无效");
49 } else {
50 while(NULL != head -> next){
51 len+=1;
52 head = head -> next;
53 }
54 return len;
55 }
56 }
57
58 //查询链表第n个结点的数据
59 int queryData(PNODE head) {
60 int number = 0;
61 printf("输入你要查询的节点\n");
62 scanf("%d", &number);
63 int count = 0;
64 PNODE p = NULL;
65 int val = 0;
66 int len = queryLen(head);
67 if(number<=0 && len < number && head != NULL) {
68 printf("所查询的节点无效或超出了链表长度范围");
69 } else {
70 p = head -> next;
71 for(count = 0; count < number; count++){
72 val = p -> data;
73 p = p -> next;
74 printf("节点数据: %d", val);
75 }
76 printf("该节点数据为: %d", val);
77 return val;
78 }
79 }
80
81 int main(){
82 PNODE pHead = create_list();
83 printf("链表头部地址: %p\n", pHead);
84 printf("链表的长度为: %d\n", queryLen(pHead));
85 queryData(pHead);
86 }
C语言链表操作
最新推荐文章于 2024-02-27 17:53:45 发布