数据结构之顺序表

好不容易linux的课程结束了,下面就进入了数据结构的课程,对于没学过这本书的我,只能弱弱的说一句,数据结构真的好难,在学习的过程中,觉得最经典的一句话便是,数据结构+算法=程序。我只想说理解数据结构真的好难,太富有逻辑性了,有时候真的还需要发挥自己的空间想象能力,几天的学习,其实还算可以吧,下面我就给大家写一点线性表的基本操作吧,我尽可能的讲解的清楚一些,方便看的人有兴趣能有自己实现。

#include <stdio.h>

#include <stdlib.h>

#include "datatype.h"

#include "seqlist.h"

void iterate_list(seqlist_t *list)

{

int i;

printf("list.last = %d, list = {", list->last);

for (i = -1; i < list->last;) {

printf("%d,", list->data[++i]);

}

if (LengthSqlist(list) > 0)

printf("\b}\n");

else

printf("}\n");

}

int main(int argc, char *argv[])

{

int i;

data_t a[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20};

data_t x;

seqlist_t *list;

list = CreateEmptySqlist();

if (NULL == list) return -1;

for (i = 0; i < 10; i++) {

if (InsertSqlist(list, i, a[i]) < 0)

break;

}

iterate_list(list);

GetSqlist(list, 4, &x);

printf("list[4] = %d\n", x);

printf("updated list[4] to 100\n");

SetSqlist(list, 4, 100);

GetSqlist(list, 4, &x);

printf("now list[4] = %d\n", x);

iterate_list(list);

printf("removed list[4]\n");

DeleteSqlist(list, 4);

GetSqlist(list, 4, &x);

printf("now list[4] = %d\n", x);

printf("and total number of list is %d\n", LengthSqlist(list));

iterate_list(list);

ClearSqlist(list);

printf("after clear, total number of list is %d\n", LengthSqlist(list));

iterate_list(list);

DestroySqlist(list);

return 0;

}

#include <stdio.h>

#include <stdlib.h>

#include "seqlist.h"

seqlist_t *CreateEmptySqlist()

{

seqlist_t *list;

list = (seqlist_t *)malloc(sizeof(seqlist_t));

if (list) {

list->last = -1;

}

return list;

}

void DestroySqlist(seqlist_t *list)

{

if (NULL != list)

free(list);

}

int FullSqlist(seqlist_t *list)

{

if (list) {

if ((MAX - 1) == list->last) {

return 1;

} else {

return 0;

}

} else {

return -1;

}

}

int EmptySqlist(seqlist_t *list)

{

if (list) {

if (-1 == list->last) {

return 1;

} else {

return 0;

}

} else {

return -1;

}

}

void ClearSqlist(seqlist_t *list)

{

if (list) {

list->last = -1;

}

return;

}

int LengthSqlist(seqlist_t *list)

{

if (list) {

return (list->last + 1);

} else {

return -1;

}

}

int GetSqlist(seqlist_t *list, int at, data_t *x)

{

if (!list) return -1;

if ((at < 0) || (at > list->last)) return -1;

if (x) {

*x = list->data[at];

}

return 0;

}

int SetSqlist(seqlist_t *list, int at, data_t x)

{

if (!list) return -1;

if ((at < 0) || (at > list->last)) return -1;

list->data[at] = x;

return 0;

}

int InsertSqlist(seqlist_t *list, int at, data_t x)

{

int i;

if (!list) return -1;

if (at < 0) {

/* at must >=0 */

return -1;

}

if (FullSqlist(list)) {

/* memory space is not sufficient */

return -2;

}

if (at > list->last) {

at = list->last + 1;

}

for (i = list->last; i >= at; i--) {

list->data[i + 1] = list->data[i];

}

list->data[at] = x;

list->last++;

return 0;

}

int DeleteSqlist(seqlist_t *list, int at)

{

int i;

if (!list) return -1;

if ((at < 0) || (at > list->last)) return 0;

for (i = at; i < list->last; i++) {

list->data[i] = list->data[i + 1];

}

list->last--;

return 1;

}

#ifndef _SEQ_LIST_H_

#define _SEQ_LIST_H_

#include "datatype.h"

#define MAX 100

typedef struct {

data_t data[MAX];

int last; /* pointer to the last element of the array */

} seqlist_t;

/*

* create a list and init it as empty

* Input : void

* Output: void

* Return: new list, NULL when failed

*/

seqlist_t *CreateEmptySqlist();

/*

* destroy a list

* Input : the list to be destroied.

* Output: void

* Return: void

*/

void DestroySqlist(seqlist_t *list);

/*

* clear the list and reset it as empty

* Input : the list to be cleared.

* Output: void

* Return: void

*/

void ClearSqlist(seqlist_t *list);

/*

* judge if the list is empty

* Input: the list to be tested.

* Output: void

* Return:

* 1: list is empty

* 0: not

* -1: error, e.g. the list is invalid

*/

int EmptySqlist(seqlist_t *list);

/*

* judge if the list is full

* Input : the list to be tested.

* Output: void

* Return:

* 1 : list is full

* 0 : not

* -1: error

*/

int FullSqlist(seqlist_t *list);

/*

* get length of the list

* Input : the list to be tested.

* Output: void

* Return:

* >= 0: length of the list;

* -1 : means error

*/

int LengthSqlist(seqlist_t *list);

/*

* Insert element at the specified position. If the "at" exceed the

* up-range of the list, append the data at the end of the list.

* e.g. insert a new data into a {}.

* Input :

* list : the list to be operated.

* at : the position at which to insert the new element,

* position index starts from zero.

* x : the data to be inserted

* Output: void

* Return:

* 0 : success;

* <0: error

*/

int InsertSqlist(seqlist_t *list, int at, data_t x);

/*

* delete the element by the position

* Input :

* list : the list to be operated.

* at : the position at which to delete the element,

* position index starts from zero

* Output : void

* Return :

* 1 : success;

* 0 : not found

* -1: error

*/

int DeleteSqlist(seqlist_t *list, int at);

/*

* get data of element at specified position

* Input :

* list : the list to be operated.

* at : the position where to get the element at,

* position index starts from zero.

* Output:

* x : the data value returned

* Return:

* 0 : success;

* -1: error, e.g. list is invalid; ‘at‘ extends

* the range of the list

*/

int GetSqlist(seqlist_t *list, int at, data_t *x);

/*

* set/update data of element at specified position

* Input :

* list : the list to be operated.

* at : the position at where to set the element,

* position index starts from zero

* x : the new data value

* Output: void

* Return:

* 0 : success;

* -1: error, e.g. list is invalid; ‘at‘ extends the

* range of the list

*/

int SetSqlist(seqlist_t *list, int at, data_t x);

#endif /* _SEQ_LIST_H_ */

#ifndef _DATA_TYPE_H_

#define _DATA_TYPE_H_

typedef int data_t;

#endif /* _DATA_TYPE_H_ */

上面的内容是四个部分,其中两个.c文件,两个.h文件。共同实现顺序表的各种操作,时间不多了,要下课了,只能轻描淡写的为大家写到这里,大家可以把上面的程序仔细的研究一下,希望能有能好学习顺序表为下面的链表打下基础。

时间: 2024-10-11 01:27:07

数据结构之顺序表的相关文章

数据结构。顺序表

#include <stdio.h>#include <stdlib.h> #define LIST_INIT_SIZE 100#define LIST_INCREMENT 10typedef struct Point   //element type{    int x;    int y;}Point;typedef Point ElemType;typedef struct          //list type{    ElemType *elem;     //data

Windows 已在 数据结构_顺序表.exe 中触发一个断点——new和delete注意事项

实现数据结构的顺序表的类时,输入,改,删,查都可以,但是最后析构函数时持续出错 错误提示"Windows 已在 数据结构_顺序表.exe 中触发一个断点" int *elem=new int(LIST_INIT_SIZE); if(!elem)cout<<"overflow"<<endl; if(leng>LIST_INIT_SIZE) cout<<"error"; else {    length=le

数据结构学习---顺序表

在准备考研的时候就想发学习笔记,想来已经过了多时.现在在培训班又要展开学习,说明一件事:408是指导学习研究计算机的基础!对于编写程序而言,数据结构与算法,是关键!我想其他的组成原理,计算机网络,操作系统也很重要,这是一个system,有必要有需要学习认真的学习之.希望这个是好的开始! ---------------------------------------------------------------- 昨天晚上看浙大在网易云课上的视频,没有上过浙大的我还是非常激动,哈哈,三个短视频看

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前

javascript数据结构之顺序表

关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间,然后将线性表放入其中,这样做便于线性表的存取,但是不利于插入和删除,而且在事先无法确定线性表长度的前提下可能会造成内存浪费或溢出. 这篇我是用javascript来实现线性表中的顺序表. 下面上代码: 1 var orderList = function(){ 2 var items = [];

数据结构:顺序表的基本操作

顺序表作业: #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int T; class SeqList{ private: T *data; int MaxSize; ///顺序表最多可以存放的元素个数. int last; ///顺序表最后一个元素的下标,初始值为-1. public: SeqList(int sz); void Input();

计蒜客课程数据结构(顺序表)

1.线性表是由相同数据类型的 n 个数据元素a0,a1,......,an-1 组成的有限序列.一个数据元素可以由若干个数据项组成.若用 L 命名线性表,则其一般表示如下: L=(a0,a1,......,an-1) 其中, a0?? 是唯一的“第一个”数据元素,又称为表头元素:an-1?? 是唯一的“最后一个”数据元素,又称为表尾元素. 线性表按照存储结构,可以分为顺序表和链表两种类型. 2.顺序表是在计算机内存中以数组形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.