数据结构学习1:实现一个简单的线性表功能

数据结构:

一个简单的线性表的实现

  学习了数据结构有一段时间了,那是半年前老师课堂上讲的,最后由于一些原因,没能听到最后,前几天在写一些算法的时候,发现自己的数据结构还是太渣了,因此便又拿起了那本很有价值的数据结构的书,重新来啃这本厚厚的书,数据结构在我们编程中是非常的重要的,希望这次的学习能有一个好的开头,并且能在这个过程中有所得吧!

下面是我写的一个简单的线性表的实现:

  

#include"stdafx.h"
#include<iostream>
using namespace std;

// MyList.cpp : Defines the entry point for the console application.
//

#define    MAXCOUNT 50
#define ERROR 0
#define OK 1
#define YES 2;
#define NO 3;
typedef int ElemType;
typedef int Status;

typedef struct
{
    int length;
    ElemType data[MAXCOUNT];
}MyList;

//初始化一个线性表
void InitList(MyList *list,int length)
{

    for (int i = 0; i<length; i++)
    {
        list->data[i]= i;
    }
    list->length = length;
}

//判断一个线性表是否为空
Status ListEmety(MyList list)
{
    if (list.length == 0)
    {
        return YES;
    }

    else
    {
        return NO;
    }
}

//获取一个线性表中的指定的元素
Status GetElem(MyList list, int i, ElemType *e)
{
    if (i>list.length||i<1)
    {
        return ERROR;
    }

    *e = list.data[i];
    return OK;
}

//清空一个线性表
void ClearList(MyList *list)
{
    for (int i = 0; i < list->length; i++)
    {
        list->data[i] = NULL;
    }
    list->length = 0;
}

//查找一个值是否与线性表中的数据相等
Status ExistElem(MyList list,ElemType e)
{
    for (int i = 0; i < list.length; i++)
    {
        if (e == list.data[i])
        {
            return YES;
        }
    }

    return NO;
}

//放回表中数据的个数
int ListLength(MyList list)
{
    return list.length;
}

//插入一个数据
Status InsertList(MyList *list,int x,ElemType e)
{
    if (list->length >= MAXCOUNT||x>=MAXCOUNT||x<=0)
    {
        return ERROR;
    }

    //移动元素
    for (int i = list->length; i >= x - 1; i--)
    {
        list->data[i] = list->data[i - 1];
    }
    list->data[x - 1] = e;
    list->length++;
    return OK;
}

//删除一个数据
Status DeleteElem(MyList *list, int x, ElemType *e)
{
    if (list->length == 0 || x <= 0 || x > MAXCOUNT)
    {
        return ERROR;
    }

    *e = list->data[x - 1];

    for (int i = x - 1; i < list->length - 1; i++)
    {
        list->data[i] = list->data[i + 1];
    }

    list->length--;
    return OK;
}

int main()
{
    //获取状态的信息
    Status status;

    //新建一个线性表
    MyList list;
    //MyList *p;
    //p= &list;
    //InitList(p);//指针的方式
    InitList(&list,20);

    ElemType value;
    //ElemType *e;
    //e = &value;
    //status = GetElem(list,19,e);   //指针的方式
    status= GetElem(list,19,&value);
    cout << "status:" << status << "\n" << "values:" << value << endl;

    //判断是否存在3
    ElemType e = 3;
    Status stats;
    stats = ExistElem(list,e);
    if (stats == 2)
    {
        cout << "存在" << endl;
    }
    else if (stats == 3)
    {
        cout << "不存在" << endl;
    }
    else
    {
        cout << "程序有错误" << endl;
    }

    //插入一个数据
    Status st;
    st = InsertList(&list,3,99);
    cout << st << endl;
    cout << list.data[2] << endl;
    cout << ListLength(list) << endl;

    //删除一个数据
    Status ss;
    ElemType ee;
    ss = DeleteElem(&list, 3, &ee);
    cout << ss << endl;
    cout << ee << endl;
    cout << ListLength(list) << endl;

    cin.get();

    return 0;
}

  代码中存在一些没有完善的地方,大致的功能已经实现,在后续的学习中会逐步完善。

时间: 2024-10-19 20:57:14

数据结构学习1:实现一个简单的线性表功能的相关文章

数据结构学习小结2 (第二章:线性表)

一.小结(1)认为最重要的内容小结:1.链表和顺序表的操作的代码实现.(初始化.创建.取值.查找.删除.插入)2.线性表的应用:线性表的合并:有序表的合并3.一元多项式的和的代码实现. (2)其他杂七杂八的收获:1.更深理解了->的含义:->是指针的指向运算符,通常与结构体一起使用.[从小组成员上获得的收获]2.通过作业和视频学习了单链表的逆转的实现3.尾指针不为空,尾指针->next才为空4.看了老师“带你打代码”里面有序表合并的代码写法,让我更熟悉一些操作,譬如: 新建一个结点: (

LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 黄韧(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 回顾: [计算机三个法宝] 1)存储程序计算机 2)函数调用堆栈 3)中断 [操作系统两把宝剑] 1)中断上下文的切换:保存现场和恢复现场 2)进程上下文的切换 一.使用gdb跟踪调试内核从start_kernel到init进程启动 使用实验楼的虚拟机打开

【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间

打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多,5毛钱一根,还有几根1.5的. 嗯 接着说gcc的事 先把源代码贴上来 //gettime.h #ifndef _GET_TIME_H_ #define _GET_TIME_H_ void PrintCurrentTime(); #endif //gettime.c #include <stdio.

TCP学习之建立一个简单的客户/服务器系统--回射系统

TCP学习之建立一个简单的客户/服务器系统--回射系统 相关的资料可以参考Unix网络编程,这个只是修改版,不需要依赖任何文件,可以独立编译通过,而且是在两台不同的主机上进行的. fggets和fputs这两个函数来自标准I/O函数库,writen和readline见my_unp.h头文件 //my_unp.h #include<stdarg.h> #include<syslog.h> #include<stdio.h> #include<netinet/in.h

c语言描述简单的线性表,获取元素,删除元素,

1 //定义线性表 2 #define MAXSIZE 20 3 typedef int ElemType; 4 typedef struct 5 { 6 ElemType data[MAXSIZE]; //这是数组的长度,从0开始,也就是最大长度 7 int length; //这是线性表的长度,表示线性表已经存储了多少个元素 8 9 }SqList; 10 /* 11 ************************** 12 ************************** 13 */

一个简单的微安表

这是一个用STM8S103F3P6单片机和一个LM358运算放大器制作的一个简单的微安表,可以用来测量1mA以下的小电流,分辨率是1uA.接通电源就开始测量. 开机时的工作电流是15mA,使用9V层叠电池供电.电路板: 内部图片: 电路图在最后一页.原理很简单,通过一个100欧的电阻对待测电流取样,经过一个LM358放大50倍后送到单片机进行AD转换.这个单片机的电源电压为5V,AD分辨率10位.设进来的电流为A微安,理论上AD的读数X可以通过下式得到: X = 100*A*50*2^10/(5

完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input("please input a number:"))except ValueError: print("第一个运算数字输入非数字") try: b=int(raw_input("please input another number:"))except Val

数据结构学习日记2:实现一个简单的线性表功能(链式存储方式)

数据结构学习日记,此次是用链表来实现一个线性表的功能 // ListTable1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namespace std; #define ERROR 0; #define OK 1; typedef int Status; typedef int ElemType; //声明一个节点 typedef struct Node { ElemType d

Android 多媒体开发学习之制作一个简单的画板

一个简单的画板,可以绘制,可以选择颜色,可以保存. 当然了这种工具一般常用的通讯软件都是会有的,比如QQ, 飞秋等 其中我们必须监听手指的触摸事件,手指的触摸事件就分为3种: 按下,抬起,移动. 通常我们只需要关系按下的时候,然后就是整个手指滑动的过程.然后将手指滑动的过程绘制为不同的直线.当然也可以设置绘制的颜色,绘制直线的宽度等. public class MainActivity extends Activity { private int TouchX; private int Touc