线性表实现——数组实现

  1 #include <stdio.h>
  2
  3 #define MAZSIZE 20
  4 typedef int ElemType;
  5 typedef struct {
  6     ElemType data[MAZSIZE];
  7     int length;
  8 }ArrList;
  9
 10 #define OK 1
 11 #define ERROR 0
 12 #define true 1;
 13 #define false 0;
 14 typedef int Status;
 15
 16 Status InitList(ArrList *L)
 17 {
 18     L->length = 0;
 19     return OK;
 20 }
 21
 22 Status ListEmpty(ArrList L)
 23 {
 24     if(L.length == 0)
 25         return true;
 26
 27     return false;
 28 }
 29
 30 Status ClearList(ArrList *L)
 31 {
 32     L->length = 0;
 33
 34     return OK;
 35 }
 36
 37 Status GetElem(ArrList L , int i, ElemType *e)
 38 {
 39     if (i > L.length || i < 1 || L.length==0)
 40         return ERROR;
 41     *e = L.data[i-1];
 42
 43     return OK;
 44 }
 45
 46 Status LocateElem(ArrList L, ElemType e)
 47 {
 48     if (L.length == 0)
 49         return ERROR;
 50     int i;
 51     for (i = 0; i < L.length; i++)
 52     {
 53         if (L.data[i] == e)
 54             break;
 55     }
 56     if (i >= L.length)
 57         return ERROR;
 58     return i + 1;
 59 }
 60
 61 Status ListInsert(ArrList *L, int i, ElemType e)
 62 {
 63     if (L->length == MAZSIZE)
 64         return ERROR;
 65     if ((i<1) || (i> L->length+1))
 66         return ERROR;
 67     int j;
 68     if (i <= L->length)
 69     {
 70         for (j = L->length; j > i - 1; j--)
 71         {
 72             L->data[j] = L->data[j - 1];
 73         }
 74     }
 75     L->data[i-1] = e;
 76     L->length++;
 77     return OK;
 78 }
 79
 80 Status ListDelete(ArrList *L, int i, ElemType *e)
 81 {
 82     if (L->length == 0)
 83         return ERROR;
 84     if ((i<1) && (i>L->length))
 85         return ERROR;
 86     int j;
 87     *e = L->data[i - 1];
 88     if (i < L->length)
 89     {
 90         for (j = i - 1; j < L->length; j++)
 91         {
 92             L->data[j] = L->data[j + 1];
 93         }
 94     }
 95     L->length--;
 96     return OK;
 97 }
 98
 99 int ListLength(ArrList *L)
100 {
101     return L->length;
102 }
103
104 Status CreateList(ArrList *L)
105 {
106     int i;
107     for (i = 0; i<MAZSIZE; i++)
108     {
109         L->data[i] = i + 1;
110         L->length++;
111     }
112     return OK;
113 }
114 void TraverseList(const ArrList *L)
115 {
116     int i;
117     for (i = 0; i < L->length; i++)
118         printf(" %d ", L->data[i]);
119     printf("\n");    }
时间: 2024-10-24 17:50:06

线性表实现——数组实现的相关文章

[自制简单操作系统] 4、计时器(线性表实现优化中断)

1.第一版:数组方式[09d] >_<" 在bootpack.h里面的timer.c的声明和结构体: 1 /* timer.c */ 2 #define MAX_TIMER 500 //最多500个定时器 3 struct TIMER{ 4 unsigned int flags;//flags记录各个寄存器状态 5 unsigned int timeout;//用来记录离超时还有多长时间,一旦这个剩余时间为0,程序就往FIFO缓冲区里发送数据,定时器就是用这种方法通知HariMain

线性表实现——双向链表

1 include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define OK 1 6 #define ERROR 0 7 typedef int Status; 8 typedef int ElemType; 9 10 typedef struct DNode 11 { 12 ElemType data; 13 struct DNode* next; 14 struct DNode* front

线性表实现——单向循环链表

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define OK 1 6 #define ERROR 0 7 typedef int Status; 8 typedef int ElemType; 9 10 typedef struct Node 11 { 12 ElemType data; 13 struct Node* next; 14 }Node; 15 16 typedef

线性表实现——单链表

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define OK 1 6 #define ERROR 0 7 typedef int Status; 8 typedef int ElemType; 9 10 typedef struct Node 11 { 12 ElemType data; 13 struct Node* next; 14 }Node; 15 16 typedef

线性表实现——自动扩容实现

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 #define OK 1 6 #define ERROR 0 7 8 typedef struct { 9 int x; 10 int y; 11 }Point; 12 13 typedef struct { 14 Point *pt; 15 int length; 16 int size; 17 }AutoArrList; 18 1

线性表实现——双向循环链表

1 /*双向循环链表*/ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <time.h> 6 7 #define OK 1 8 #define ERROR 0 9 typedef int Status; 10 typedef int ElemType; 11 12 typedef struct DCNode 13 { 14 ElemType data; 15 struct DCNode* next; 16

2.1.1线性表实现栈的建立,入栈,出栈等操作

#include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100 #define STACK_INCREMENT 10 #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int status; typedef int SElemType; typedef struct { SElemType *base;//在构造之前和销毁之后,base的值为NULL

图论——图的邻接表实现——Java语言(完整demo)

1.图的简单实现方法--邻接矩阵 表示图的一种简单的方法是使用一个一维数组和一个二维数组,称为领接矩阵(adjacent matrix)表示法. 对于每条边(u,v),置A[u,v]等于true:否则,数组的元素就是false.如果边有一个权,那么可以置A[u][v]等于该权,而使用一个很大或者很小的权来标记不存在的边.虽然这样表示非常简单,但是,它的空间需求则为θ(|V|2),如果图的边不是很多,那么这种表示的代价就太大了.若图是稠密(dense)的:|E|=θ(|V|2),则领接矩阵是合适的

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表