線性錶鏈式儲存-練習題1
阿新 • • 發佈:2019-03-02
題目:
寫一演算法,從鏈式表中刪除自第i個元素開始的K個元素。
思路:
需要注意刪除結點後,一定要釋放記憶體空間。
程式碼:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define OK 1 #define ERROR 0 typedef int ElementType; typedef struct Node { ElementType data; struct Node * next; } List, *LinkList; void print(LinkList H); void initList(LinkList *H); void createFromEnd(LinkList H); int deleteList(LinkList L, int i, int k); int main(int argc, char *argv[]) { LinkList H; initList(&H); printf("尾插法實現連結串列:\n"); createFromEnd(H); printf("尾插法結果:\n"); print(H); deleteList(H, 1, 9); printf("\n刪除連結串列部分元素後:\n"); print(H); return 0; } /** * 遍歷輸出單鏈表 */ void print(LinkList H) { LinkList p = H->next; while (p) { printf("%d\t", p->data); p = p->next; } } /** * 初始化連結串列 */ void initList(LinkList *H) { /* 產生頭結點,並使L指向此頭結點 */ *H = (LinkList)malloc(sizeof (List)); (* H)->next = NULL; } /** * 以尾插法建立單鏈表 */ void createFromEnd(LinkList H) { List *node; ElementType type; srand(time(0)); int i = 0; for (i; i < 10; i++) { node = (List *)malloc(sizeof(List)); node->data = rand() % 100 + 1; H->next = node; H = node; } H->next = NULL; } /** * 刪除單鏈表中自第i位元素開始的k個元素 */ int deleteList(LinkList L, int i, int k) { List *list = L, *p; int index = 0; while (index < i - 1 && list->next != NULL) { index++; list = list->next; } if (index != i -1) { printf("\n插入位置不合法!\n"); return ERROR; } for (index = 0; index < k && list->next != NULL; index++) { p = list->next; list->next = p->next; /*一定要記得釋放刪除的結點所佔記憶體空間*/ free(p); } return OK; }
<