實現了單向鏈表的創建,節點插入,增加,數據填充等
源程序:
- //單向鏈表基本操作,包括創建,整體賦值,整體讀取,單個賦值,單個讀取等
- //已經在VC6.0上運行通過
- #include<stdio.h>
- #include<stdlib.h>
- typedef struct DataBuf
- {
- char Byte8;
- int Byte16;
- long Byte32;
- }DataBuf;
- DataBuf readbuf;
- //鏈表節點和要存儲的數據申明,要插入的數據都在這里添加即可
- typedef struct SingleListNode
- {
- //要插入的鏈表數據值
- char Byte8; //要插入數據(1byte)
- int Byte16; //要插入數據(2byte)
- long Byte32; //要插入數據(4byte)
- struct SingleListNode *next; //每個鏈表的節點
- }SingleListNode;
- typedef SingleListNode *SingleList; //鏈表指針類型定義
- /***********************************
- ** 名稱: SingleListNodeCreate
- ** 描述: 創建單向鏈表表頭節點
- ** 輸入參數: 無
- ** 輸出參數: 無
- ** 返回值: 鏈表頭指針
- *************************************/
- SingleList SingleListNodeCreate (void)
- {
- SingleList pHead = (SingleList)malloc(sizeof(SingleListNode)); //為鏈表表頭分配內存空間,創建后次鏈表表頭將永遠不會消失,地址賦給表頭指針
- pHead->next=NULL; //指針頭賦值為空
- return pHead; //返回鏈表表頭
- }
- /**************************************************************************
- ** 名稱: SingleListInsert
- ** 描述: 單向鏈表插入數據運算
- ** 輸入參數: SingleList pos: 要插入的鏈表表頭節點
- byte : 要插入的數據
-
- ** 輸出參數: 無
- ** 返回值: 插入節點的指針
- ****************************************************************************/
- SingleList SingleListInsert(SingleList pos, char byte8,int byte16,int byte32)
- {
- SingleList ptr = (SingleList)malloc(sizeof(SingleListNode)); //為新創建的鏈表節點分配內存
- ptr-> Byte8 = byte8; //插入數據
- ptr-> Byte16 = byte16;
- ptr-> Byte32 = byte32;
- ptr->next = pos->next; //指向下一個節點的
- pos->next = ptr; //把創建的節點指針傳給下一個節點。用于移動節點
- return ptr; //返回創建的鏈表節點的指針
- }
- /**************************************************************************
- ** 名稱: TargetNodeWriteData
- ** 描述: 向目標節點寫入數據
- ** 輸入參數: 鏈表頭指針,目標結點,要寫入的數據緩存區
- ** 輸出參數: 無
- ** 返回值: 無
- ***************************************************************************/
- void WriteTargetNodeData(SingleList pHead,int TargetNode,DataBuf *writebuf)
- {
- unsigned int i;
- SingleList pos = NULL;
- pos = pHead;
- for(i=0;i<=TargetNode;i++)
- {
- pos = pos->next;
- }
- pos->Byte8 = writebuf->Byte8;
- pos->Byte16 = writebuf->Byte16;
- pos->Byte32 = writebuf->Byte32;
- }
- /*************************************************************
- ** 名稱: ReadTargetNodeData
- ** 描述: 讀指定節點的數據到緩沖區
- ** 輸入參數: 單項鏈表頭指針,目標節點的號數
- ** 輸出參數: 無
- ** 返回值: 無
- **************************************************************/
- void ReadTargetNodeData(SingleList pHead,int TargetNode,DataBuf *readbuf)
- {
- unsigned int i;
- SingleList pos = NULL;
- pos = pHead; //頭節點賦值給
- for(i=0;i<=TargetNode;i++)
- {
- pos = pos->next;
- }
- readbuf->Byte8 = pos->Byte8; //讀出來鏈表中的數據值
- readbuf->Byte16 = pos->Byte16;
- readbuf->Byte32 = pos->Byte32;
- }
- /************************************
- ** 名稱: SingleListFree
- ** 描述: 釋放鏈表占用的空間
- ** 輸入參數: pHead: 鏈表頭指針
- ** 輸出參數: 無
- ** 返回值: 無
- *************************************/
- void SingleListFree (SingleList pHead)
- {
- SingleList p = pHead; //得到鏈表表頭指針
- while(p)
- {
- pHead = pHead->next; //節點順序移動
- free(p); //釋放指到的對應節點的內存
- p = pHead; //傳遞給下一個節點
- }
- }
- //先往鏈表中插入數字
- void main()
- {
- unsigned int i;
- SingleList pos = NULL; //定義鏈表節點
- SingleList pHead; //定義鏈表表頭節點
-
- pHead = SingleListNodeCreate (); //創建鏈表表頭并且返回節點指針
- pos = pHead; //頭節點賦值給節點
- for(i=0;i<100;i++)
- {
- pos = SingleListInsert (pos,i,i*100,i*1000); //給對應鏈表節點中插入數據
- }
- pos= pHead; //再次回到鏈表頭節點
- pos = pos->next;
- while(pos)
- {
- printf("%d %d %d\n",pos->Byte8,pos->Byte16,pos->Byte32); //循環打印鏈表節點中的數據
- pos = pos->next; //節點順序移動
- }
- printf("Output end..........................................\n");
- ReadTargetNodeData(pHead,66,&readbuf); //讀出目標節點的數據
- printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32); //打印出來
- readbuf.Byte8=123; //重新給緩沖區賦值
- readbuf.Byte16=234;
- readbuf.Byte32=456;
- WriteTargetNodeData(pHead,6,&readbuf); //寫入目標節點數據
- ReadTargetNodeData(pHead,6,&readbuf); //讀出來目標節點的數據
- printf("%d %d %d\n",readbuf.Byte8,readbuf.Byte16,readbuf.Byte32);
- SingleListFree (pHead); //釋放節點占用的內存
- while(1)
- {;}
- }
復制代碼
全部代碼下載:
單向鏈表應用_已在VC6.0上通過.rar
(189.55 KB, 下載次數: 11)
2017-1-3 21:15 上傳
點擊文件名下載附件
|