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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5219|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:91442 發表于 2015-10-29 15:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
文章目錄:
解析uc/os-ii操作系統之-寫在前面:http://www.zg4o1577.cn/bbs/dpj-39350-1.html
解析uc/os-ii操作系統--之創建一個單向鏈表:http://www.zg4o1577.cn/bbs/dpj-39833-1.html
單向鏈表之--添加結點的程序詳解:http://www.zg4o1577.cn/bbs/dpj-39834-1.html
什么是“堆”和“棧”? 動態內存分配? :http://www.zg4o1577.cn/bbs/dpj-39835-1.html
C語言函數指針,函數動態回調:http://www.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);//打印結果

}

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区视频 | 日本精品一区二区三区在线观看视频 | 精品一二区 | 精品久久成人 | 在线只有精品 | 国产东北一级毛片 | 在线午夜| 久久久成人精品 | 97精品国产手机 | 一级做a爰片性色毛片16美国 | 午夜激情在线视频 | 爱爱视频在线观看 | 毛片网站在线观看 | 国产一区精品在线 | 欧美久久久久久久 | 亚洲精品视频免费观看 | 毛片网站在线观看 | 午夜黄色影院 | 欧美中文字幕在线观看 | 一区二区三区回区在观看免费视频 | 欧美日韩久久 | 精品免费国产一区二区三区四区 | 精品国产一区二区三区观看不卡 | 一区二区日韩精品 | 精品91久久 | 日韩影音 | 日韩欧美二区 | 自拍偷拍亚洲欧美 | 午夜精品一区二区三区在线 | 有码一区| 91久久久久久久 | 国产精品视频播放 | 龙珠z国语版在线观看 | 天天操网 | 欧美中文字幕一区二区三区亚洲 | 国产精品不卡视频 | 久久99精品久久久久久国产越南 | 久久综合九九 | 午夜视频免费在线观看 | 在线观看视频一区二区三区 | 亚洲三级在线 |