苏嵌//赵妍//2018.7.24

 

 

 

 

今日学习任务

 

 

嵌入式 C 语言实战开发-数据动态管理

日任务完成情况

 

 

今日任务按计划完成

熟练掌握带表头和不带表头的单链表的操作

日开发中出现的问题汇总

 

  1. 对于while(temp != NULL):(遍历所有结点)和while(temp->next != NULL)(找最后一个结点)要区分清楚
  2. 在删除结点后要记得释放指针,并将其指向NULL;
  3. 在逆序中定义的p(前)指针不需要分配空间

 

日未解决问题

 

日开发收获

  1. 掌握数据结构的作用:管理数据(存、取、遍历、查找)
  2. 链表的作用:解决数组带来空间利用的问题;数据静态分配,容易造成浪费,链表动态分配

 

自我评

 

 

 

今天基本能够跟上老师的教学安排

其他

 

 

 

1.不带表头的单链表的简单使用

1 #include <stdio.h>

  2 #include <stdlib.h>

  3

  4 struct node

  5 {

  6     int num;

  7     struct node *next;

  8 };

  9

 10 int main()

 11 {

 12     struct node *head;

 13     struct node *p1 = (struct node *)malloc (sizeof(struct node));

 14     struct node *p2 = (struct node *)malloc (sizeof(struct node));

 15     struct node *p3 = (struct node *)malloc (sizeof(struct node));

 16

 17     p1->num = 1;

 18     p1->next = p2;

 19

 20     p2->num = 2;

 21     p2->next = p3;

 22

 23     p3->num = 3;

 24     p3->next = NULL;

 25

 26     head = p1;

 27

 28     while(head != NULL)

 29     {

 30         printf("%d\n",head->num);

 31         head = head->next;

 32     }

 33

 34     return 0;

 35 }

 

 

2.不带表头的单链表(初始化、头插、中间插、尾插、入删除、倒序)

1 #include <stdio.h>

  2 #include <stdlib.h>

  3

  4 enum link

  5 {

  6     LINK_EMPTY,

  7     SUCCESS,

  8     FAIL,

  9     DELETE_SUCCESS,

 10     DELETE_FAIL,

 11     REVERSE_SUCCESS,

 12     REVERSE_FAIL

 13 };

 14

 15 struct node

 16 {

 17     int num;

 18     struct node *next;

 19 };

 20

 21 typedef struct node Node;

 22 typedef Node * link;

 23

 24 void create_link(link *head)

 25 {

 26     *head = NULL;

 27 }

 28 void insert_head_node(link newnode, link *head)

 29 {

 30     newnode->next = *head;

 31     *head = newnode;

 32 }

 33

 34 int insert_mid_node(link newnode, link *head, int num)

 35 {

 36     if(*head == NULL)

 37     {

 38         return LINK_EMPTY;

 39     }

 40     else

 41     {

 42         link temp = *head;

 43         while(temp != NULL)

 44         {

 45             if(temp->num == num)

 46             {

 47                 newnode->next = temp->next;

 48                 temp->next = newnode;

 49                 return SUCCESS;

 50             }

 51             temp = temp->next;

 52         }

 53         return FAIL;

 54     }

 55 }

 56

 57 void insert_tail_node(link newnode, link *head)

 58 {

 59     if(*head == NULL)

 60     {

 61         newnode->next = NULL;

 62         *head = newnode;

 63     }

 64     else

 65     {

 66         link temp = *head;

 67         while(temp->next != NULL)

 68         {

 69             temp = temp->next;

 70         }

 71         temp->next = newnode;

 72         newnode->next = NULL;

 73     }

 74 }

 75

 76 int delete_link(link *head, int num)

 77 {

 78     if(*head == NULL)

 79     {

 80         return LINK_EMPTY;

 81     }

 82

 83     link temp = *head;

 84     if((*head)->num == num)

 85     {

 86         *head = (*head)->next;

 87         free(temp);

 88         temp = NULL;

 89         return DELETE_SUCCESS;

 90     }

 91     else

 92     {

 93         link p = temp;

 94         temp = temp->next;

 95

 96         while(temp != NULL)

 97         {

 98             if(temp->num == num)

 99             {

100                 p->next = temp->next;

101                 free(temp);

102                 temp = NULL;

103                 return DELETE_SUCCESS;

104             }

105             p = temp;

106             temp = temp->next;

107         }

108         return DELETE_FAIL;

109     }

110 }

111

112 reverse_link(link *head)

113 {

114     if(*head == NULL || (*head)->next == NULL)

115     {

116         return REVERSE_FAIL;

117     }

118     link p = *head;

119     link s = p->next;

120     link t = s->next;

121

122     while(t != NULL)

123     {

124         s->next = p;

125         p = s;

126         s = t;

127         t = t->next;

128     }

129     s->next = p;

130     (*head)->next = NULL;

131     *head = s;

132     return REVERSE_SUCCESS;

133 }

134

135 void display_link(link head)

136 {

137     link temp = head;

138     while(temp != NULL)

139     {

140         printf("%d\n",temp->num);

141         temp = temp->next;

142     }

143 }

144 int main()

145 {

146     int i;

147     link head;

148     link newnode;

149

150     create_link(&head);

151

152     for(i = 0; i <10; i++)

153     {

154         newnode = (link)malloc(sizeof(Node));

155         newnode->num = i +1;

156         insert_tail_node(newnode,&head);

157     }

158    // delete_link(&head,6);

159

160     reverse_link(&head);

161     display_link(head);

162 #if 0

163     newnode = (link)malloc(sizeof(Node));

164     newnode->num = 12;

165

166     if(insert_mid_node(newnode,&head,6) == SUCCESS)

167     {

168         display_link(head);

169     }

170     else

171     {

172         printf("The link is null or no find!\n");

173     }

174 #endif

175

176     return 0;

177 }

   

  1. 带表头的单链表(初始化、头插、中间插入、尾插、删除、逆序)

  1 #include <stdio.h>

  2 #include <stdlib.h>

  3

  4 enum link

  5 {

  6     LINK_EMPTY,

  7     SUCCESS,

  8     FAIL,

  9     DELETE_SUCCESS,

 10     DELETE_FAIL,

 11     REVERSE_SUCCESS,

 12     REVERSE_FAIL

 13 };

 14

 15 struct node

 16 {

 17     int num;

 18     struct node *next;

 19 };

 20

 21 typedef struct node Node;

 22 typedef Node * link;

 23

 24 void create_link(link *head)

 25 {

 26     *head = (link)malloc(sizeof(Node));

 27     (*head)->next = NULL;

 28 }

 29 void insert_head_node(link newnode, link *head)

 30 {

 31     newnode->next = (*head)->next;

 32     (*head)->next = newnode;

 33 }

 34

 35 int insert_mid_node(link newnode, link *head, int num)

 36 {

 37         link temp = (*head)->next;

 38         while(temp != NULL)

 39         {

 40             if(temp->num == num)

 41             {

 42                 newnode->next = temp->next;

 43                 temp->next = newnode;

 44                 return SUCCESS;

 45             }

 46             temp = temp->next;

 47         }

 48         return FAIL;

 49 }

 50

 51 void insert_tail_node(link newnode, link *head)

 52 {

 53         link temp = *head;

 54         while(temp->next != NULL)

 55         {

 56             temp = temp->next;

 57         }

 58         temp->next = newnode;

 59         newnode->next = NULL;

 60 }

 61

 62 int delete_link(link *head, int num)

 63 {

 64     link temp = *head;

 65     link p = temp;

 66     temp = temp->next;

 67

 68     while(temp != NULL)

 69     {

 70         if(temp->num == num)

 71         {

 72             p->next = temp->next;

 73             free(temp);

 74             temp = NULL;

 75             return DELETE_SUCCESS;

 76         }

 77         p = temp;

 78         temp = temp->next;

79        }

 80         return DELETE_FAIL;

 81 }

 82

 83 reverse_link(link *head)

 84 {

 85     if((*head)->next == NULL || (*head)->next->next == NULL)

 86     {

 87         return REVERSE_FAIL;

 88     }

 89     link p = *head;

 90     link s = p->next;

 91     link t = s->next;

 92

 93     while(t != NULL)

 94     {

 95         s->next = p;

 96         p = s;

 97         s = t;

 98         t = t->next;

 99     }

100     s->next = p;

101     (*head)->next->next = NULL;

102     (*head)->next = s;

103     return REVERSE_SUCCESS;

104 }

105

106 void display_link(link head)

107 {

108     link temp = head->next;

109     while(temp != NULL)

110     {

111         printf("%d\n",temp->num);

112         temp = temp->next;

113     }

114 }

115 int main()

116 {

117     int i;

118     link head;

119     link newnode;

120

121     head = (link)malloc(sizeof(Node));

122     create_link(&head);

123

124     for(i = 0; i <10; i++)

125     {

126         newnode = (link)malloc(sizeof(Node));

127         newnode->num = i +1;

128         insert_tail_node(newnode,&head);

129         //insert_head_node(newnode,&head);

130     }

131     //delete_link(&head,6);

132

133     reverse_link(&head);

134     display_link(head);

135

136     newnode = (link)malloc(sizeof(Node));

137     newnode->num = 12;

138 #if 0

139     if(insert_mid_node(newnode,&head,6) == SUCCESS)

140     {

141         display_link(head);

142     }

143     else

144     {

145         printf("The link is null or no find!\n");

146     }

147 #endif

148

149     return 0;

150 }

 

4.循环单链表

 1 #include <stdio.h>

  2 #include <stdlib.h>

  3

  4 enum link

  5 {

  6     LINK_EMPTY,

  7     SUCCESS,

  8     FAIL,

  9     DELETE_SUCCESS,

 10     DELETE_FAIL,

 11     REVERSE_SUCCESS,

 12     REVERSE_FAIL

 13 };

 14

 15 struct node

 16 {

 17     int num;

 18     struct node *next;

 19 };

 20

 21 typedef struct node Node;

 22 typedef Node * link;

 23

 24 void create_link(link *head)

 25 {

 26     *head = (link)malloc(sizeof(Node));

 27     (*head)->next = (*head);

 28

 29 }

 30 void insert_head_node(link newnode, link *head)

 31 {

 32     newnode->next = (*head)->next;

 33     (*head)->next = newnode;

 34 }

 35

 36 int insert_mid_node(link newnode, link *head, int num)

 37 {

 38         link temp = (*head)->next;

 39         while(temp != (*head))

 40         {

 41             if(temp->num == num)

 42             {

 43                 newnode->next = temp->next;

 44                 temp->next = newnode;

 45                 return SUCCESS;

 46             }

 47             temp = temp->next;

 48         }

 49         return FAIL;

 50 }

 51

 52 void insert_tail_node(link newnode, link *head)

53 {

 54         link temp = *head;

 55         while(temp->next != (*head))

 56         {

 57             temp = temp->next;

 58         }

 59         temp->next = newnode;

 60         newnode->next = (*head);

 61 }

 62

 63 int delete_link(link *head, int num)

 64 {

 65     link temp = *head;

 66     link p = temp;

 67     temp = temp->next;

 68

 69     while(temp != (*head))

 70     {

 71         if(temp->num == num)

 72         {

 73             p->next = temp->next;

 74             free(temp);

 75             temp = NULL;

 76             return DELETE_SUCCESS;

 77         }

 78         p = temp;

79         temp = temp->next;

 80         }

 81         return DELETE_FAIL;

 82 }

 83

 84 reverse_link(link *head)

 85 {

 86     if((*head)->next == (*head) || (*head)->next->next == (*head))

 87     {

 88         return REVERSE_FAIL;

 89     }

 90     link p = *head;

 91     link s = p->next;

 92     link t = s->next;

 93

 94     while(t != (*head))

 95     {

 96         s->next = p;

 97         p = s;

 98         s = t;

 99         t = t->next;

100     }

101     s->next = p;

102     (*head)->next = s;

103     return REVERSE_SUCCESS;

104 }

105

106 void display_link(link head)

107 {

108     link temp = head->next;

109     while(temp != head)

110     {

111         printf("%d\n",temp->num);

112         temp = temp->next;

113     }

114 }

115 int main()

116 {

117     int i;

118     link head;

119     link newnode;

120

121     create_link(&head);

122

123     for(i = 0; i <10; i++)

124     {

125         newnode = (link)malloc(sizeof(Node));

126         newnode->num = i +1;

127         insert_tail_node(newnode,&head);

128         //insert_head_node(newnode,&head);

129     }

130     //delete_link(&head,6);

131

132     reverse_link(&head);

133     display_link(head);

134

135     newnode = (link)malloc(sizeof(Node));

136     newnode->num = 12;

137 #if 0

138     if(insert_mid_node(newnode,&head,6) == SUCCESS)

139     {

140         display_link(head);

141     }

142     else

143     {

144         printf("The link is null or no find!\n");

145     }

146 #endif

147

148     return 0;

149

150 }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值