(一)线性表结构1数组实现

Posted on 2017-02-01 20:41  Chopin写字的地方  阅读(235)  评论(0编辑  收藏  举报

(一)数组实现线性表

  1.定义集合(结构体实现)

1 #define MAX 10
2  typedef struct {
3       int DATA[MAX];
4       int last;
5 }LIST;

    DATA数组用于存放整型数据,last表示最后元素的下标

   2.定义各类操作

    a.创建空表

    

LIST *MakeEmpty() {
    LIST *PtrL;
    PtrL = (LIST *)malloc(sizeof(LIST));
    PtrL->last = -1;
    return PtrL;

}

    b.插入数据

void Insert(int x, LIST *ptrl, int i) {
    if (ptrl->last == MAX - 1) {
        printf("表满");
        return;
    }
    if (i<1 || i>ptrl->last + 2) {
        printf("位置不合法");
        return;
    }
    int j;
    for (j = ptrl->last; j >= i - 1; j--) {
        ptrl->DATA[j + 1] = ptrl->DATA[j + 1];
    }
    ptrl->DATA[i - 1] = x;
    ptrl->last++;
    return;
}

     c.查找

int Find(LIST *ptrl, int data) {
    int i = 0;
    while (i <= ptrl->last&&ptrl->DATA[i] != data)
        i++;
    if (i > ptrl->last)
        return -1;
    else
        return i;
}

    d.删除

void Delete(LIST *l, int i) {
    int j;
    if (i<1 || i>l->last + 1) {
        printf("不存在该位置!");
        return;
    }
    for (j = i; j <= l->last; j++) {
        l->DATA[j - 1] = l->DATA[j];
    }
    l->last--;
}

    e.打印(遍历)

void Print(LIST *l) {
    int i;
    for (i = 0; i <= l->last; i++)
        printf("%d ", l->DATA[i]);
}

 

 


 


 

 

完整实现

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define MAX 10
 4 typedef struct {
 5     int DATA[MAX];
 6     int last;
 7 }LIST;
 8 
 9 LIST *MakeEmpty() {
10     LIST *PtrL;
11     PtrL = (LIST *)malloc(sizeof(LIST));
12     PtrL->last = -1;
13     return PtrL;
14 
15 }
16 
17 int Find(LIST *ptrl, int data) {
18     int i = 0;
19     while (i <= ptrl->last&&ptrl->DATA[i] != data)
20         i++;
21     if (i > ptrl->last)
22         return -1;
23     else
24         return i;
25 }
26 
27 void Insert(int x, LIST *ptrl, int i) {
28     if (ptrl->last == MAX - 1) {
29         printf("表满");
30         return;
31     }
32     if (i<1 || i>ptrl->last + 2) {
33         printf("位置不合法");
34         return;
35     }
36     int j;
37     for (j = ptrl->last; j >= i - 1; j--) {
38         ptrl->DATA[j + 1] = ptrl->DATA[j + 1];
39     }
40     ptrl->DATA[i - 1] = x;
41     ptrl->last++;
42     return;
43 }
44 
45 void Delete(LIST *l, int i) {
46     int j;
47     if (i<1 || i>l->last + 1) {
48         printf("不存在该位置!");
49         return;
50     }
51     for (j = i; j <= l->last; j++) {
52         l->DATA[j - 1] = l->DATA[j];
53     }
54     l->last--;
55 }
56 
57 void Print(LIST *l) {
58     int i;
59     for (i = 0; i <= l->last; i++)
60         printf("%d ", l->DATA[i]);
61 }

 

Copyright © 2024 Chopin写字的地方
Powered by .NET 9.0 on Kubernetes