單向連結串列(C語言)
阿新 • • 發佈:2020-09-20
typedef struct node { int elem; struct node* next; }DataNode; typedef struct { int count; DataNode* next; }*LinkHead,LinkNode; int Init(LinkHead* L) {//傳進來的引數要是有指標符號,那麼下面在設變數的時候就不用* LinkHead p = (LinkHead)malloc(sizeof(LinkHead)); DataNode* q = (DataNode*)malloc(sizeof(DataNode)); q->next = NULL; p ->count = 0; p->next = q;//表中的元素初始化 (*L) = p; return 0; }
二:插入操作:
int Insert(LinkHead* L, int elem, int pos) { if (pos<1 || pos>(*L)->count + 1) { return -1; } DataNode* q = (DataNode*)malloc(sizeof(DataNode));//新建一個元素 q->elem = elem; DataNode* p = (*L)->next;//將表中的所有元素提取出來 for (int i = 1; i < pos; i++) { p = p->next;//直到插入的那個元素的位置,之前所有元素遍歷(很重要)為了下面方便操作,所以將元素遍歷到那個元素的位置,以後就按照這個模式遍歷就好 } q->next = p->next;//把將要插入元素位置的後面所有元素賦值到q->next中暫時儲存起來,而在q中已經儲存進去了那個新元素,那就是第一個elem中p->next = q;//將插入元素後面的東西再插入進去 (*L)->count += 1; return 0; }
三:刪除操作:
int Delete(LinkHead* L, int pos) { if (pos<1 || pos>(*L)->count + 1) return -1; DataNode* p = (*L)->next, * q; for (int i = 1; i <= pos; i++) {//因為要刪除,所以要空過那個元素,放到後面 p = p->next; } q = p->next; p->next = q->next; free(q); (*L)->count -= 1; return 0; }