久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5384|回復: 0
收起左側

解析uc/os-ii操作系統--之創建一個單向鏈表

[復制鏈接]
ID:91442 發表于 2015-10-29 15:31 | 顯示全部樓層 |閱讀模式
文章目錄:
解析uc/os-ii操作系統之-寫在前面:http://m.zg4o1577.cn/bbs/dpj-39350-1.html
解析uc/os-ii操作系統--之創建一個單向鏈表:http://m.zg4o1577.cn/bbs/dpj-39833-1.html
單向鏈表之--添加結點的程序詳解:http://m.zg4o1577.cn/bbs/dpj-39834-1.html
什么是“堆”和“棧”? 動態內存分配? :http://m.zg4o1577.cn/bbs/dpj-39835-1.html
C語言函數指針,函數動態回調:http://m.zg4o1577.cn/bbs/dpj-39836-1.html

       操作系統最核心的部分就是任務或曰線程(個人認為叫線程Thread更好),當用戶創建好了各個線程并啟動系統之后就交給操作系統內核去調度了。uc/os-ii操作系統的每個線程都對應一個任務控制塊TCB,實際上TCB就是鏈表的一個結點node;將每個結點鏈接成雙向鏈表,再對結點進行插入,刪除,遍歷等操作是uc/os-ii操作系統源碼中最常見的部分。為此,本人非常愿意學習一下如何創建一個鏈表,并表示要真正的理解和學會創建一個簡單的單向鏈表的方法和技巧。鏈表應該是c語言的較為復雜的部分了;沒有較好的c語言功底,感覺真的很難去理解uc/os-ii操作系統原理。

  創建一個單向鏈表的思想:
通過3個指向結點的指針變量head,p1,p2,可以創建一個任意長的單向鏈表(理論上如果內存足夠大的話),鏈表的優點就是插入,刪除,生成,遍歷操作很方便。本例程中:通過PC鍵盤給每個結點數據域變量賦值,當鍵盤輸入“0”則退出鏈表創建程序。也就是說當鍵盤每輸入一個值本例就可以生成一個結點并鏈接成一個單向鏈表,然后是遍歷每個結點。具體在源碼中有詳細注釋。

  本例程以徐彤老師C語言鏈表例程為藍本編寫,本人敲了3遍。下面的程序可以在VS2013和VC++6.0編譯平臺運行:直接復制即可。

#include "stdafx.h"
#include"stdio.h"
//#include"malloc.h"
//#define _CRT_SECURE_NO_WARNINGS
struct node
{
        int num;
        node *next;

};  //聲明一個結點
/*通過3個指針變量*head,*p1,*p2,創建一個若干長的單向鏈表*/
node * creat(void)
{
        node *head, *p1, *p2;//聲明3個指向結點的指針變量,注意,這里指針沒有初始化,指針指向的可能是亂碼  
        p1 = new node; //給p1賦值,p1先行開辟空間

        scanf_s("%d", &p1->num);//通過PC鍵盤給結點數據域變量賦值,因為只有p1已經有明確的指向
        head = p2 = p1;//3個指針指向相同的node空間,能不能寫成head=p1=p2?不符合語法
  while (p1->num != 0)  //只要鍵盤輸入的不是0,就循環生成結點并鏈接成單向鏈表
  {
        p1 = new node;//通過循環不斷開辟新的結點p1,
        scanf_s("%d", &p1->num);//給新的結點p1數據域變量賦值,該句決定while循環何時結束
        p2->next = p1;//讓p2成為鏈表連接的橋梁,循環剛開始時“ head=p2=p1”所以p2指向第一個結點,有所指向!
        p2 = p1;//這兩句是本程序的核心所在,讓p2也指向新開辟出來的結點空間,此時p2和p1指向了相同的新結點!

}

        p2->next = NULL;//當程序跳出while循環后,說明創建鏈表已經結束;此時就將最后一個結點指針域指向NULL!
        return head;//返回鏈表頭指針,為什么返回頭指針?有了這個鏈表的頭指針,就可以遍歷任意一個結點

}
void display(node* head)//鏈表頭指針作為傳遞參數
{
        node *p = head;
        while (p->next != NULL)  //從鏈表頭指針開始遍歷
        {

                printf("%d\n", p->num);
                p = p->next;//這一步很關鍵!要理解!將下一個結點的指針傳遞給p,此時p就指向了下一個結點。
     //不斷的指向后續結點,此時p就指向了下一個結點
        }

}
void main()
{
        node *head = creat();//創建鏈表頭指針
        display(head);//打印結果

}

鑒于本文公開,可能路遇強人。特聲明:本人只是學習者和愛好者,錯誤之處有時難免歡迎指正。謝謝。


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜一级视频 | 精品欧美一区二区三区久久久 | 天堂va蜜桃一区二区三区 | 精品久久一区二区三区 | 成人在线视频观看 | 国产一区在线视频 | 男女啪啪免费视频 | 欧美伦理一区二区 | 成人黄色一级片 | 中文字幕偷拍 | 狠狠干2018| 亚洲精品美女 | 成人在线观看网站 | 日韩av在线免费播放 | 天天摸天天干 | 色网站在线观看 | 天天草夜夜草 | 国产精品久久久久久无人区 | 国产一区二区三区久久 | 欧美一级黄色大片 | 在线成人免费视频 | 欧美亚洲三级 | 亚洲最新视频 | 成人精品在线观看 | 一级片免费 | 久久天天躁狠狠躁夜夜躁2014 | 超碰在线观看免费 | 欧美亚洲国产精品 | 日韩福利在线观看 | 亚洲亚洲人成综合网络 | 中文字幕在线观看免费视频 | 日韩一级二级三级 | 欧美一级艳片视频免费观看 | 国产精品视频网站 | 久久av一区二区 | 国内自拍xxxx18| 亚洲欧美综合另类 | 亚洲欧美精品一区二区 | 久久艳片www.17c.com | 欧美精品一二三 | 99一区二区 |