資料結構之線性表的順序儲存 用指標的方式實現

2021-07-27 08:40:02 字數 3074 閱讀 4875

線性表的順序儲存實際很簡單,但是本文努力將其寫的更加規範。

** c

seqlist.h

#ifndef _seqlist_h_

#define _seqlist_h_

typedef void list;

typedef void listnode;

//建立並且返回乙個線性表

list* list_create(int capacity);

//銷毀乙個線性表list

void list_destroy(list* list);

//將乙個線性表list中的所有元素清空, 線性表回到建立時的初始狀態

void list_clear(list* list);

//返回乙個線性表list中的所有元素個數

int list_length(list* list);

//向乙個線性表list的pos位置處插入新元素node

int list_insert(list* list, listnode* node, int pos);

//獲取乙個線性表list的pos位置處的元素

listnode* list_get(list* list, int pos);

//刪除乙個線性表list的pos位置處的元素返回值為被刪除的元素,null表示刪除失敗

listnode* list_delete(list* list, int pos);

#endif

seqlist.c

#include "seqlist.h"

#include #include #include typedef struct seqlist

seqlist;

//建立並且返回乙個線性表

list* list_create(int capacity)

memset(seqlist, 0, sizeof(seqlist));

seqlist->node = (unsigned int**)malloc(sizeof(unsigned int*) * capacity);

if (seqlist->node == null)

seqlist->capacity = capacity;

seqlist->length = 0;

return seqlist;

}//銷毀乙個線性表list

void list_destroy(list* list)

temp = (seqlist *)list;

if (temp->node != null)

free(temp);

temp = null;

}//將乙個線性表list中的所有元素清空, 線性表回到建立時的初始狀態

void list_clear(list* list)

temp = (seqlist *)list;

temp->length = 0;

}//返回乙個線性表list中的所有元素個數

int list_length(list* list)

temp = (seqlist *)list;

return temp->length;

}//向乙個線性表list的pos位置處插入新元素node

int list_insert(list* list, listnode* node, int pos)

temp = (seqlist *)list;

//判斷是不是滿了

if (temp->length >= temp->capacity)

//如果插入的位置如果不連續則修正

if (pos > temp->length)

//元素後移

for (i = temp->length; i > pos; i--)

//插入元素

temp->node[pos] = node;//temp->node是二級指標,temp->node[pos]是一級指標

temp->length++;

return 0;

}//獲取乙個線性表list的pos位置處的元素

listnode* list_get(list* list, int pos)

temp = (seqlist *)list;

return (listnode*)temp->node[pos];

}//刪除乙個線性表list的pos位置處的元素返回值為被刪除的元素,null表示刪除失敗

listnode* list_delete(list* list, int pos)

temp = (seqlist *)list;

node1 = temp->node[pos];

//元素前移

/*for (i = temp->length; i>pos; i--)

*/ for (i = pos; i < temp->length; i++)

temp->length--;

return (listnode*)node1;

}

main.c

#include #include #include "seqlist.h"

typedef struct teacher

teacher;

int main(vooid)

int ret1 = list_insert(mylist, &t1, 0);

int ret2 = list_insert(mylist, &t2, 0);

int ret3 = list_insert(mylist, &t3, 0);

for (int i = 0; i < list_length(mylist);i++)

list_delete(mylist, 0);

printf("在0號位置刪除乙個元素之後\n");

for (int i = 0; i < list_length(mylist); i++)

list_clear(mylist);

system("pause");

}

執行結果:

資料結構之線性表 順序儲存

從新在學習一遍資料結構,每天盡量都寫點!fuction the list struct by xiaolong date 2012年 03月 13日 星期二 16 50 12 cst 功能 線性表的順序儲存實現 主要功能 include include define max size 20 defi...

資料結構 線性表之順序儲存

第i個元素與第乙個元素的儲存位置滿足 loc ai loc a1 i 1 m include include include include 線性表的順序儲存 define max size 100 定義線性表最大長度 順序儲存的缺陷之一 typedef structdata typedef str...

資料結構之線性表 順序儲存

線性表作為一種最簡單的資料結構,在資料的管理和運用方面有著很大的作用,而這種特殊的資料集合,其自身有著很強的特點 線性表 線性表是n個型別相同的資料元素的有限集合,且n大於0,除第乙個元素無直接前驅,和最後乙個元素沒有直接後繼以外,其餘的每個元素都有乙個直接前驅和乙個直接後繼,而且元素之間具有一對一...