Home 数据结构 顺序表代码
Post
Cancel

数据结构 顺序表代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <stdio.h>
#include <stdlib.h> //malloc()、exit()

#define Size 5  //对Size进行宏定义,表示顺序表申请空间的大小

typedef struct Table
{
    int * head; //声明了一个名为head的长度不确定的数组,也叫“动态数组”
    int length; //记录当前顺序表的长度
    int size;   //记录顺序表分配的存储容量
}table;

// 初始化函数
table initTable()
{
    table t;

    t.head = (int*)malloc(Size * sizeof(int));  //构造一个空的顺序表,动态申请存储空间

    if (!t.head)    //如果申请失败,作出提示并直接退出程序
    {
        printf("初始化失败");
        exit(0);
    }

    t.length = 0;   //空表的长度初始化为0
    t.size = Size;  //空表的初始存储空间为Size

    return t;
}

//插入函数,其中,elem为插入的元素,add为插入到顺序表的位置
table addTable(table t, int elem, int add)
{
    int i;

    //判断插入本身是否存在问题(如果插入元素位置比整张表的长度+1还大(如果相等,是尾随的情况),或者插入的位置本身不存在,程序作为提示并自动退出)
    if (add > t.length + 1 || add < 1) 
    {
        printf("插入位置有问题");
        return t;
    }
    //做插入操作时,首先需要看顺序表是否有多余的存储空间提供给插入的元素,如果没有,需要申请
    if (t.length == t.size) 
    {
        t.head = (int *)realloc(t.head, (t.size + 1) * sizeof(int));
        if (!t.head) 
        {
            printf("存储分配失败");
            return t;
        }
        t.size += 1;
    }
    //插入操作,需要将从插入位置开始的后续元素,逐个后移
    for (i = t.length - 1; i >= add - 1; i--) 
    {
        t.head[i + 1] = t.head[i];
    }

    //后移完成后,直接将所需插入元素,添加到顺序表的相应位置
    t.head[add - 1] = elem;
    //由于添加了元素,所以长度+1
    t.length++;
    
    return t;
}

// 删除函数
table delTable(table t, int add) 
{
    int i;

    if (add > t.length || add < 1) 
    {
        printf("被删除元素的位置有误");
        exit(0);
    }
    for (i = add; i < t.length; i++) 
    {
        t.head[i - 1] = t.head[i];
    }

    t.length--;

    return t;
}

//查找函数,其中,elem表示要查找的数据元素的值
int selectTable(table t, int elem) 
{
    int i;
    
    for (i = 0; i < t.length; i++) 
    {
        if (t.head[i] == elem) 
        {
            return i + 1;
        }
    }

    return -1;
}

//更改函数,其中,elem为要更改的元素,newElem为新的数据元素
table amendTable(table t, int elem, int newElem) 
{
    int add = selectTable(t, elem);

    t.head[add - 1] = newElem;

    return t;
}

//输出顺序表中元素的函数
void displayTable(table t) 
{
    int i;

    for (i = 0; i < t.length; i++) 
    {
        printf("%d ", t.head[i]);
    }
    printf("\n");
}

int main() {
    int i, add;

    table t1 = initTable();

    //向顺序表中添加元素
    for (i = 1; i <= Size; i++) 
    {
        t1.head[i - 1] = i;
        t1.length++;
    }

    printf("原顺序表:\n");
    displayTable(t1);

    printf("删除元素1:\n");
    t1 = delTable(t1, 1);
    displayTable(t1);

    printf("在第2的位置插入元素5:\n");
    t1 = addTable(t1, 5, 2);
    displayTable(t1);

    printf("查找元素3的位置:\n");
    add = selectTable(t1, 3);
    printf("%d\n", add);
    
    printf("将元素3改为6:\n");
    t1 = amendTable(t1, 3, 6);
    displayTable(t1);

    return 0;
}

程序运行结果为:

原顺序表:
1 2 3 4 5
删除元素1:
2 3 4 5
在第2的位置插入元素5:
2 5 3 4 5
查找元素3的位置:
3
将元素3改为6:
2 5 6 4 5

This post is licensed under CC BY 4.0 by the author.

数据结构 链表代码

数据结构 栈代码