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
 17 //初始化线性表L并返回线性表
 18 SList *Init_SList(){
 19     SList *L;
 20     L = (SList *)malloc(sizeof(SList));
 21     L ->last = -1;
 22     printf("初始化成功\n");
 23     return L;
 24 }
 25
 26
 27 //线性表的数据录入
 28 SList *indata_SList(SList *L){
 29     elemtype x ;
 30     scanf("%d" ,&x);
 31     while(x != 0){
 32         L -> last += 1;
 33         L -> data[L -> last] = x;
 34         scanf("%d",&x);
 35         }
 36     return L;
 37 }
 38
 39
 40 //判断表是否为空
 41 bool is_empty(SList *L){
 42     return (L -> last == -1);
 43 }
 44
 45
 46 //求线性表的表长
 47 int SList_Length(SList *L){
 48     return(L -> last + 1);
 49 }
 50
 51
 52 //遍历线性表
 53 void print_SList(SList *L){
 54     int i = 0;
 55     for(i = 0; i < L -> last + 1; i++)
 56     {
 57         printf("  a[%d] = %d",i , L -> data[i]);
 58         if(i%5 == 0) printf("\n");
 59     }
 60 }
 61
 62
 63 //插入数据于指定位置
 64 SList *insert_SList(SList *L, int insert, int loc){
 65     if(loc < 0||loc > L -> last + 1){
 66         printf("请输入正确的插入位置\n");
 67     }
 68     else{
 69     L -> last = L -> last + 1;
 70     int i = 0;
 71     for(i = L -> last; i > loc - 1; i--){
 72         L -> data[i] = L -> data[i-1];
 73     }
 74     L -> data[loc] = insert;
 75     }
 76     return L;
 77 }
 78
 79
 80 //删除顺序表中指定位置的值非数组下标
 81 SList *delete_SList(SList *L, int loc){
 82     int e = 0;
 83     if(!(L -> data[loc - 1])||loc > L -> last + 2)
 84         return ERROR;
 85     else
 86     {
 87         int i = 0;
 88         e = L -> data[loc - 1];
 89         for (i = loc ; i <= L -> last; i++) {
 90             L -> data[i - 1] = L -> data[i];
 91         }
 92         L -> last = L -> last - 1;
 93         printf("您已成功删除数据%d",e);
 94         return L;
 95     }
 96 }
 97
 98
 99 //改动某一数据的值
100 SList *change_SList(SList *L, int e, int loc){
101     if(!(L -> data[loc - 1])||loc > L -> last + 2)
102         return ERROR;
103     else{
104         L -> data[loc] = e;
105     }
106     return L;
107 }
108
109
110 //查看某一元素是否在线性表中,若在,则返回其位置
111 int search_SList(SList *L, int e){
112     int i = 0;
113     int loc = 0;
114     for(i = 0 ; i <= L -> last - 1; i++)
115     {
116         if(L -> data[i] == e)
117             loc = i;
118
119     }
120     if(loc < L -> last - 1) return loc;
121     else return 0;
122 }
123
124
125 //主函数
126 int main(){
127     int e = 0;
128     int loc = 0;
129     SList * MyList = Init_SList();
130     printf("请输入一组数据以插入进线性表,以0作为停止输入标志:");
131     indata_SList(MyList);
132     is_empty(MyList);
133     int length = SList_Length(MyList);
134     printf("您输入的线性表的表长为%d",length);
135     print_SList(MyList);
136     printf("\n");
137     printf("请输入您要插入的数据以及位置:");
138     scanf("%d %d",&e,&loc);
139     MyList = insert_SList(MyList,e,loc);
140     print_SList(MyList);
141     printf("\n");
142     printf("请选择需要删除的元素位置:");
143     scanf("%d",&loc);
144     MyList = delete_SList(MyList, loc);
145     print_SList(MyList);
146     printf("\n");
147     printf("请输入需要改动为新元素的值及其位置");
148     scanf("%d %d",&e, &loc);
149     change_SList(MyList,e,loc);
150     print_SList(MyList);
151     printf("\n");
152     printf("请输入要查找的元素:");
153     scanf("%d",&e);
154     loc = search_SList(MyList, e);
155     if(loc != 0)
156     printf("您要查找的元素在位置%d",loc);
157     else printf("您要查找的元素不在顺序表内\n");
158     printf("\n");
159 }
时间: 2024-10-10 05:35:21

C版——顺序线性表的相关文章

顺序线性表

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 1

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

胡乱写了一些代码 /* ============================================================================ 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语言实现(一)---2.3线性表的顺序表示和实现

注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实现,主要操作包括建表,插入元素,删除元素,查找元素,合并表等操作,根据书中伪代码编写了C语言,使用int类型进行了测试,需要注意的是查找元素时使用了函数指针,C语言初学者不易理解,可查阅相关书籍学习. 二.头文件 1 //head.h 2 /** 3 My Code 4 */ 5 #include

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

/********************************************************************************************************************/ 声明: (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