线性表(代码、分析、汇编)
生活随笔
收集整理的這篇文章主要介紹了
线性表(代码、分析、汇编)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄:
- 代碼:
- 分析:
- 匯編:
代碼:
LinkList.h
#ifndef _LINKLIST_H_ #define _LINKLIST_H_typedef void LinkList; //定義線性表類型 typedef struct _tag_LinkListNode LinkListNode;//定義線性表節點類型 struct _tag_LinkListNode {LinkListNode* next;//節點指針指向下一個節點 };LinkList* LinkList_Create();//聲明定義順序表函數void LinkList_Destroy(LinkList* list);//聲明順序表銷毀函數void LinkList_Clear(LinkList* list);//聲明順序表清空函數int LinkList_Length(LinkList* list);//聲明獲取順序表長度函數int LinkList_Insert(LinkList* list, LinkListNode* node, int pos);//聲明線性表插入節點函數LinkListNode* LinkList_Get(LinkList* list, int pos);//聲明線性表獲取節點函數LinkListNode* LinkList_Delete(LinkList* list, int pos); //聲明線性表刪除節點函數#endifLinkList.c
#include <stdio.h> #include <malloc.h> #include "LinkList.h"typedef struct _tag_LinkList //定義實際應用的線性表類型 {//(重點:要把節點放在結構體的第一個元素,因為后面指針類型轉換用到,要不然運行出錯)LinkListNode header;//頭節點 int length; //長度 } TLinkList;LinkList* LinkList_Create() // 定義順序表函數 {TLinkList* ret = (TLinkList*)malloc(sizeof(TLinkList));//申請空間只申請一個節點與長度if( ret != NULL ){ret->length = 0;ret->header.next = NULL;//只有一個節點}return ret; }void LinkList_Destroy(LinkList* list) // 定義順序表銷毀函數 {free(list); }void LinkList_Clear(LinkList* list) // 定義順序表清空函數 {TLinkList* sList = (TLinkList*)list;if( sList != NULL ){sList->length = 0;sList->header.next = NULL;} }int LinkList_Length(LinkList* list) // 定義獲取順序表長度函數 {TLinkList* sList = (TLinkList*)list;int ret = -1;if( sList != NULL ){ret = sList->length;}return ret; }int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) // 定義線性表插入節點函數 { TLinkList* sList = (TLinkList*)list;int ret = (sList != NULL) && (pos >= 0) && (node != NULL); //判斷是否為空與pos有效與節點不為空int i = 0;if( ret ){LinkListNode* current = (LinkListNode*)sList; //指向頭節點for(i=0; (i<pos) && (current->next != NULL); i++)//找到插入位置節點的前一個節點{current = current->next;}node->next = current->next; //新節點的next指向插入位置前一個節點的nextcurrent->next = node;//插入位置前一個節點的next指向新節點sList->length++; //長度++}return ret; }LinkListNode* LinkList_Get(LinkList* list, int pos) // 定義線性表獲取節點函數 {TLinkList* sList = (TLinkList*)list;LinkListNode* ret = NULL;int i = 0;if( (sList != NULL) && (0 <= pos) && (pos < sList->length) )//判斷表不為空,pos在范圍內{LinkListNode* current = (LinkListNode*)sList;//指向頭節點for(i=0; i<pos; i++) //找到獲取節點前一個節點{current = current->next;}ret = current->next;//取得獲取節點}return ret; }LinkListNode* LinkList_Delete(LinkList* list, int pos) // 定義線性表刪除節點函數 {TLinkList* sList = (TLinkList*)list;LinkListNode* ret = NULL;int i = 0;if( (sList != NULL) && (0 <= pos) && (pos < sList->length) )//判斷表不為空,pos在范圍內{LinkListNode* current = (LinkListNode*)sList;//指向頭節點for(i=0; i<pos; i++)//找到刪除節點前一個節點{current = current->next;}ret = current->next; //取得刪除節點current->next = ret->next;// 刪除的前一個節點的next指向刪除節點的下一個節點sList->length--;//長度--}return ret; }lmain.c
#include <stdio.h> #include <stdlib.h> #include "LinkList.h"struct Value {LinkListNode header;int v; };int main(int argc, char *argv[]) {int i = 0;LinkList* list = LinkList_Create();struct Value v1;struct Value v2;struct Value v3;struct Value v4;struct Value v5;v1.v = 1;v2.v = 2;v3.v = 3;v4.v = 4;v5.v = 5;LinkList_Insert(list, (LinkListNode*)&v1, LinkList_Length(list));LinkList_Insert(list, (LinkListNode*)&v2, LinkList_Length(list));LinkList_Insert(list, (LinkListNode*)&v3, LinkList_Length(list));LinkList_Insert(list, (LinkListNode*)&v4, LinkList_Length(list));LinkList_Insert(list, (LinkListNode*)&v5, LinkList_Length(list));FILE* fp = fopen("ad.dat", "wb");fwrite(list, sizeof(LinkList*), 1, fp);fclose(fp);/* for(i=0; i<LinkList_Length(list); i++){struct Value* pv = (struct Value*)LinkList_Get(list, i);printf("%d\n", pv->v);}while( LinkList_Length(list) > 0 ){struct Value* pv = (struct Value*)LinkList_Delete(list, 0);printf("%d\n", pv->v);}*/LinkList_Destroy(list);getchar();return 0; }分析:
匯編:
總結
以上是生活随笔為你收集整理的线性表(代码、分析、汇编)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 训狗多少钱啊?
- 下一篇: c1货运资格证多少钱啊?