顺序线性表


  1 /**
2 * @brief 线性表的顺序表示与实现
3 *
4 * @author amur-leopard
5 *
6 * @date 2014/06/01
7 */
8 #include <stdio.h>
9 #include <stdlib.h>
10
11 //-----------------预定义常量和类型-------------------
12 #define OK 1
13 #define ERROR 0
14 #define OVERFLOW -1
15
16 typedef int status; // 函数类型,其值是函数结果状态代码
17
18
19 //-----------线性表的动态分配顺序存储结构-------------
20 #define LIST_INIT_SIZE 100 // 存储空间的初始分配量
21 #define LIST_INCREMENT 10 // 存储空间的分配增量
22
23 typedef struct{
24 int *elem; // 存储空间基址
25 int list_length; // 当前长度
26 int list_size; // 当前分配的存储容量(以sizeof(ElemType)为单位)
27 }seq_list;
28
29
30 //------------------基本操作的声明--------------------
31 status seq_list_init(seq_list &list); // 初始化线性表
32 status seq_list_insert(seq_list &list, int i, int e); // 向线性表中某个位置前插入新元素
33 status seq_list_delete(seq_list &list, int i, int &e); // 删除线性表中某个位置的元素
34 status seq_list_print(seq_list list); // 打印线性表
35
36
37 //------------------基本操作的实现--------------------
38 /**
39 * @brief 初始化线性表
40 *
41 * @param list 待初始化的线性表
42 *
43 * @return 函数状态
44 */
45 status seq_list_init(seq_list &list)
46 {
47 list.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
48 if(!list.elem)
49 {
50 exit(OVERFLOW);
51 }
52 list.list_length = 0;
53 list.list_size = LIST_INIT_SIZE;
54 return OK;
55 }
56
57 /**
58 * @brief 向线性表中某个位置前插入新元素
59 *
60 * @param list 待插入的线性表
61 * @param i 插入位置(1<=i<=list_length+1)
62 * @param e 待插入的元素
63 *
64 * @return 函数状态
65 */
66 status seq_list_insert(seq_list &list, int i, int e)
67 {
68 int j; // 用于循环
69 if(i < 1 || i > list.list_length + 1) // 错误的插入位置
70 {
71 return ERROR;
72 }
73 if(list.list_length >= list.list_size) // 存储空间已满
74 {
75 // 增加存储空间
76 int *newbase = (int *)realloc(list.elem, (list.list_size + LIST_INCREMENT) * sizeof(int));
77 if(!newbase)
78 {
79 exit(OVERFLOW);
80 }
81 list.elem = newbase;
82 list.list_size += LIST_INCREMENT;
83 }
84 for(j = list.list_length - 1; j >= i - 1; --j) // 循环后移
85 {
86 *(list.elem + j + 1) = *(list.elem + j);
87 }
88 *(list.elem + j + 1) = e;
89 ++list.list_length;
90 return OK;
91 }
92
93 /**
94 * @brief 删除线性表中某个位置的元素
95 *
96 * @param list 待删除元素所在的线性表
97 * @param i 删除位置(1<=i<=list_length)
98 * @param e 用于返回待删除元素的值
99 *
100 * @return 函数状态
101 */
102 status seq_list_delete(seq_list &list, int i, int &e)
103 {
104 int j; // 用于循环
105 if(i < 1 || i > list.list_length) // 错误的删除位置
106 {
107 return ERROR;
108 }
109 e = *(list.elem + i - 1);
110 for(j = i; j < list.list_length; ++j)
111 {
112 *(list.elem + j - 1) = *(list.elem + j);
113 }
114 --list.list_length;
115 return OK;
116 }
117
118 /**
119 * @brief 打印顺序表
120 *
121 * @return 函数状态
122 */
123 status seq_list_print(seq_list list)
124 {
125 int i; // 用于循环
126 if(list.list_length > 0)
127 {
128 printf("%d", *list.elem);
129 for(i = 1; i < list.list_length; ++i)
130 {
131 printf(" %d", *(list.elem + i));
132 }
133 printf("\n");
134 }
135 return OK;
136 }
137
138
139 //-----------------------测试-------------------------
140 /**
141 * @brief 测试函数
142 */
143 void main()
144 {
145 int e; seq_list list; seq_list_init(list);
146
147 if(OK == seq_list_print(list)) printf("print succeed!\n");
148
149 if(OK == seq_list_insert(list, 1, 11)) printf("insert (1, 11) succeed!\n"); seq_list_print(list);
150 if(OK == seq_list_insert(list, 2, 22)) printf("insert (2, 22) succeed!\n"); seq_list_print(list);
151 if(OK == seq_list_insert(list, 1, 33)) printf("insert (1, 33) succeed!\n"); seq_list_print(list);
152 if(OK == seq_list_insert(list, 2, 44)) printf("insert (2, 44) succeed!\n"); seq_list_print(list);
153 if(OK == seq_list_insert(list, 3, 55)) printf("insert (3, 55) succeed!\n"); seq_list_print(list);
154
155 if(OK == seq_list_delete(list, 5, e)) printf("delete (5, %d) succeed!\n", e); seq_list_print(list);
156 if(OK == seq_list_delete(list, 2, e)) printf("delete (2, %d) succeed!\n", e); seq_list_print(list);
157 if(OK == seq_list_delete(list, 1, e)) printf("delete (1, %d) succeed!\n", e); seq_list_print(list);
158 if(OK == seq_list_delete(list, 1, e)) printf("delete (1, %d) succeed!\n", e); seq_list_print(list);
159 if(OK == seq_list_delete(list, 1, e)) printf("delete (1, %d) succeed!\n", e); seq_list_print(list);
160
161 if(OK == seq_list_print(list)) printf("print succeed!\n");
162
163 system("pause");
164 }

顺序线性表,布布扣,bubuko.com

时间: 2024-08-09 06:19:27

顺序线性表的相关文章

自学数据结构——顺序线性表

胡乱写了一些代码 /* ============================================================================ Name : sqlist.c Author :codecup Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ==========================================

顺序线性表的代码实现

1.采用一个数组实现一个顺序线性表中添加元素.删除元素等基本操作 1 package com.ietree.basic.datastructure.Sequence; 2 3 import java.util.Arrays; 4 5 /** 6 * 顺序线性表 7 * 8 * @param <T> 9 * @author Dylan 10 */ 11 public class SequenceList<T> { 12 13 private final int DEFAULT_SIZ

数据结构回顾之顺序存储结构中的线性表(栈与队列顺序线性表实现)

说到数据结构呢,对于一个Coder来说还是蛮重要的啦,每次看数据结构的东西都有新的收获,这两天在回顾数据结构的知识.当然啦,虽然数据结构有些是理论的东西,如果好好的理解数据结构的东西还是少不了的代码的支撑的.数据结构简单的来说吧,可以分为两大类,一个是数据的"物理存储结构",另一种是数据的"逻辑存储结构".数据的"物理存储结构"又可分为顺序的和链式的(下面将会结合着代码打印内存地址的形式来观察物理存储结构). 逻辑存储结构又可分为集合,线性, 树

自学数据结构——顺序线性表2

1 /* 2 ============================================================================ 3 Name : sqlist.c 4 Author : codecup 5 Version : 6 Copyright : Your copyright notice 7 Description : Hello World in C, Ansi-style 8 ==================================

动态分配的顺序线性表的十五种操作—C语言实现

线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点:在非空有限的条件下,存在唯一的一个表头结点,唯一的一个表尾结点,除去第一个元素之外,每个数据元素都只有一个前驱,除去最后一个元素之外,每一个数据元素都只有一个后继. 注意:线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同特性(属于同一数据对象,类似数组).线性表的数据元素间有序

C版——顺序线性表

1.代码实现 1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "stdbool.h" 4 5 #define MAXSIZE 1024 6 #define ERROR 0 7 8 typedef int elemtype; 9 10 typedef struct{ 11 elemtype data[MAXSIZE]; 12 int last; 13 } SList; 14 15 16 1

数据结构_线性表的顺序表示和链式表示

/********************************************************************************************************************/ 声明: (1)*.h文件是代码声明, *.cpp文件是代码实现; (2)一般头文件的内容有: ①类型声明; ②函数声明; ③枚举; ④常量; ⑤宏 (3)以下说明是为了方便代码文件的管理而设定的一些规则, 以后代码都会按照此规则编写: 1)Pubuse.h 是几

线性表之顺序表C++实现

线性表之顺序表 一.头文件:SeqList.h //顺序线性表的头文件#include<iostream> const int MaxSize = 100;//定义顺序表SeqList的模板类template<class DataType>class SeqList{public: //顺序表无参构造器(创建一个空的顺序表) SeqList(){ length = 0 } //顺序表有参构造器(创建一个长度为n的顺序表) SeqList(DataType array[], int

数据结构 - 线性表的顺序实现

<数据结构>严蔚敏 头文件SQlist.h 1 #ifndef SQlist_H_INCLUDED 2 #define SQlist_H_INCLUDED 3 #include<stdio.h> 4 #define OK 1 5 #define ERROR -1 6 #define TRUE 1 7 #define FALSE 0 8 9 #define MAXSIZE 100 /* 存储空间初始分配量 */ 10 #define ListCreaty 10 /* 分配增量 */