1. 程式人生 > >C語言-單鏈表的基本操作-嚴蔚敏版的資料結構

C語言-單鏈表的基本操作-嚴蔚敏版的資料結構

以下部分是標頭檔案

#ifndef __LianBiao__
#define __LianBiao__

typedef int ElemType;

typedef struct LNode {
    int data;
    struct LNode *next;
}LNode, *LinkList;

int GetElem_L(LinkList L, int i, int &num);
int ListInsert_L(LinkList L, int i, int e);
void show(LinkList L);
int ListDelete_L(LinkList L, int
i, int &e); void CreateList_L(LinkList *L, int n); void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc); void clean(LinkList L); #endif

以下部分是相關程式碼的實現,後續的實現中要慢慢的引入測試用例的使用:

#include <string.h>
#include <stdio.h>
#include <stdlib.h >
#include "Lianbiao.h"


#define OK 1
; #define ERROR 0; int GetElem_L(LinkList L, int i, int &num) { L = L->next; int j = 1; while (L && j < i) { L = L->next; ++j; } if (!L || j > i) { return ERROR; } num = L->data; return OK; } int ListInsert_L(LinkList L, int i, int e) { int j =
0; while (L && (j < (i - 1))) { L = L->next; ++j; } if (!L || (j > (i - 1))) { return ERROR; } LinkList s = (LinkList)malloc(sizeof(LNode)); s->data = e; s->next = L->next; L->next = s; return OK; } void show(LinkList L) { if (L == NULL) { return; } while (L->next == NULL) { printf("%d :yyh\n", L->data); L = L->next; } } int ListDelete_L(LinkList L, int i, int &e) { LinkList q = NULL; int j = 0; while (L->next && j < (i - 1)) { L = L->next; ++j; } if (!(L->next) || j > (i - 1)) { return ERROR; } q = L->next; L->next = q->next; e = q->data; return OK; } void CreateList_L(LinkList *L, int n) { *L = (LinkList)malloc(sizeof(LNode)); (*L)->next = NULL; LinkList p = NULL; for (int i = n; i > 0; --i) { p = (LinkList)malloc(sizeof(LNode)); p->data = i; p->next = (*L)->next; (*L)->next = p; } } void MergeList_L(LinkList La, LinkList Lb, LinkList *Lc) { LinkList pa = La->next; LinkList pb = Lb->next; LinkList pc = La; *Lc = pc; while (pa && pb) { if (pa->data <= pb->data) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa ? pa : pb; free(Lb); } void clean(LinkList L) { LinkList p = NULL; while (L->data == NULL) { p = L; L = L->next; free(p); } } void main(void) { //LNode LNodes[4]; //LNodes[0].data = 1; //LNodes[0].next = &LNodes[1]; //LNodes[1].data = 2; //LNodes[1].next = &LNodes[2]; //LNodes[2].data = 3; //LNodes[2].next = &LNodes[3]; //LNodes[3].data = 4; //LNodes[3].next = NULL; LinkList L = NULL; LinkList L1 = NULL; LinkList L2 = NULL; CreateList_L(&L, 5); int num = 0; int flag = GetElem_L(L, 2, num); printf("%d : %d\n", flag, num); int flag1 = ListInsert_L(L, 4, 5); printf("%d : %d\n", flag1, num); show(L); int flag2 = ListDelete_L(L, 3, num); printf("%d : %d===========\n", flag2, num); show(L); CreateList_L(&L1, 6); puts("L1==========="); show(L1); MergeList_L(L, L1, &L2); puts("L2==========="); show(L2); clean(L); clean(L1); clean(L2); show(L); show(L1); show(L2); L = NULL; L1 = NULL; L2 = NULL; show(L); show(L1); show(L2); }