顺序表代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define OK 1
#define ERROR 0
#define MAX 1024        //顺序表最大长度
#define delay 2         //延迟两秒

typedef int ElemType;
typedef int STATUS;
typedef struct{
  ElemType data[MAX];   //数据
  int last;             //长度
} List;

/************************
          创建
输入:无
输出:顺序表指针
功能:初始化顺序表
************************/
List * createList(){
  List * list = (List *)malloc(sizeof(List));
  list->last = 0;
  return list;
}

/************************
          清空
输入:顺序表指针
输出:无
功能:清空顺序表
************************/
void clearList(List * list){
  list->last = 0;
}

/************************
          追加
输入:顺序表指针,追加值
输出:状态码
功能:追加数据
************************/
STATUS appendList(List *list,ElemType val){

  if(list->last >= MAX){
    printf("list length is overflow the MAX length\n");
    return ERROR;
  }

  list->data[list->last]=val;
  list->last++;

  return OK;
}

/************************
          插入
输入:顺序表指针,插入位,插入值
输出:状态码
功能:插入数据
************************/
STATUS insertList(List *list,int index,ElemType val){

  index--;    //index从1开始,而处理是从0开始,后面亦同

  if(index<0 || index>list->last){
    printf("index is invalid\n");
    return ERROR;
  }

  int i;
  for(i=list->last;i>index;i--)
     list->data[i]=list->data[i-1];

  list->data[index] = val;
  list->last++;
   return OK;
}

/************************
          替换
输入:顺序表指针,替换位,替换值
输出:状态码
功能:替换数据
************************/
STATUS replaceList(List *list,int index,ElemType val){

   index--;  

   if(list->last==0){
     printf("list is empty!!\n");
     return ERROR;
   }

   if(index<0 || index > list->last){
     printf("input index is invaild\n");
     return ERROR;
   }

   list->data[index]=val;
   return OK;
}

/************************
          删除
输入:顺序表指针,删除位,存储指针
输出:状态码
功能:删除数据
************************/
STATUS deleteList(List *list,int index,ElemType * docker){

  index--; 

  if(list->last==0){
    printf("no element can be deleted\n");
    return ERROR;
  };

  if(index<0 || index>list->last){
    printf("index is invalid\n");
    return ERROR;
  }

  *docker = list->data[index];  

  int i;
  for(i=index;i<(list->last-1);i++)
     list->data[i]=list->data[i+1];

  list->last--;
  return OK;
}

/************************
          获取值
输入:顺序表指针,位置,存储指针
输出:状态码
功能:获取值
************************/
STATUS getElement(List *list,int index,ElemType * docker){

  index--;

  if(index<0 || index>list->last){
     printf("index is invalid\n");
     return ERROR;
  }

  *docker = list->data[index];
  return OK;
}

/************************
         获取索引
输入:顺序表指针,开始位置,查询值
输出:状态码
功能:获取索引
************************/
STATUS getIndex(List *list,int beginIndex,ElemType value){

  beginIndex--;    //because array begin num is 0,but list begin num is 1;

  if(beginIndex >=list->last || beginIndex<0){
     printf("beginIndex is invalid\n");
     return ERROR;
  }

  int i=beginIndex;
  while(i<list->last){
    if(list->data[i]==value)return ++i;
    i++;
  }

  return OK;
}

/************************
         打印列表
输入:顺序表指针
输出:状态码
功能:将数据一一打印出来
************************/
STATUS printList(List *list){

  if(list->last == 0){
     printf("List is empty\n");
     return ERROR;
  }

  int i;
  for(i=0;i<list->last;i++){
    printf("[%d] ",list->data[i]);
    if((i+1)%10==0)printf("\n");
  }

  printf("\n");
  return OK;
}

/************************
          打印信息
输入:无
输出:无
功能:将操作信息打印出来
************************/
void printInfo(void){
  system("clear");
  printf("welcome to use sequence list\n");
  printf("----------------------------\n");
  printf("a = append    d = delete\n");
  printf("i = insert    r = replace\n");
  printf("g = getValue  G = getIndex\n");
  printf("c = clear     e = exit\n");
  printf("=========== list ===========\n");
}

int main(){
  ElemType val;
  int index;
  char select;
  List * list = createList();

  while(1){
     printInfo();
     printList(list);
     printf("please enter your choose:");
     select = getchar();

     if(select == ‘a‘){
        printf("please enter value:");
        scanf("%d",&val);
        appendList(list,val);
     }

     if(select == ‘c‘){
        clearList(list);
     }

     else if(select == ‘i‘){
       printf("please enter index:");
       scanf("%d",&index);
       printf("please enter value:");
       scanf("%d",&val);
       insertList(list,index,val);
     }

     else if(select == ‘d‘){
       printf("please enter index:");
       scanf("%d",&index);
       deleteList(list,index,&val);
       printf("last delete value: [%d]\n",val);
       sleep(delay);
     }

     else if(select == ‘r‘){
       int tmp;
       printf("please enter index:");
       scanf("%d",&index);
       printf("please enter new value:");
       scanf("%d",&val);
       replaceList(list,index,val);
     }

     else if(select == ‘g‘){
       printf("please enter index:");
       scanf("%d",&index);
       getElement(list,index,&val);
       printf("list[%d] = %d\n",index,val);
       sleep(delay);
     }

     else if(select == ‘G‘){
       printf("please enter beginIndex:");
       scanf("%d",&index);
       printf("please enter value:");
       scanf("%d",&val);
       int num = getIndex(list,index,val);
       if(num)
         printf("%d‘s index is %d\n",val,num);
       else
         printf("sorry not find\n");
       sleep(delay);
     }

     else if(select == ‘e‘){
       return 0;
     }
     printf("\n");
  }
}
时间: 2024-12-15 01:40:40

顺序表代码的相关文章

顺序表代码(指针实现)

#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 10 #define OK 1 #define ERROR 0 #define TRUE 1 #define FLASE 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; typedef struct{ ElemType * elem; int len

顺序表的C语言实现

一直在复习数学,想着要在六月底之前把数学三门四本书都过一遍,最近看到了线性代数了,好多学了都忘记了,慢慢来吧! 前段时间看的线性表了,才看了一点点,关于顺序表大致实现了下,后面抽看看看数据结构了,数学得全力复习了.准备暑假开始系统复习专业课,加油吧! 顺序表代码如下,简单实现了下,正好抓住这个机会复习了结构体,指针等知识.main()函数里写的比较乱,主要在于其他子函数里的实现 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #defi

十二、队列的实现方法三(顺序表的优化)

由于通过顺序表代码的复用实现队列的过程中,进队列要从队列的最后一个元素进入,所以造成时间复杂度加大,现通过引进front.rear优化队列实现方法 front:代表头元素的下标 rear:代表队尾下一个元素的下标 一.SeqQueue.h #ifndef _SEQQUEUE_H_ #define _SEQQUEUE_H_ typedef void SeqQueue; SeqQueue* SeqQueue_Create(int capacity);  //创建队列 void SeqQueue_De

十、队列的实现方法一(顺序表的复用)

方法一.通过对顺序表代码的复用实现队列 一.SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ typedef void SeqList; typedef void SeqListNode; SeqList* SeqList_Create(int capacity); void SeqList_Destroy(SeqList* list); void SeqList_Clear(SeqList* list); int SeqList_Length(

数据结构之线性表(顺序表,单链表)——图书管理系统

顺序表: 代码如下: 1 #include<iostream> 2 #include<fstream> 3 #include<string> 4 #include<iomanip> 5 using namespace std; 6 #define OK 1 7 #define ERROR 0 8 #define OVERFLOW -2 9 typedef int Status; 10 typedef int ElemType; 11 12 #define M

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

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

顺序表的冒泡排序算法及二分法查找代码实现

本文主要实现了比较经典的冒泡排序算法(对已经有序或者基本有序的顺序表复杂度大大降低),和二分法查找,各位看官看代码吧 //冒泡排序算法及二分法查找 #include "stdio.h" typedef struct { int key; }SSTable_Elem_Type; typedef struct { SSTable_Elem_Type*elem; int length; }SSTable_Typedef; void Bubble_Sort(SSTable_Typedef*ST

数据结构顺序表思想以及完整代码实现

本文转载自趣学算法,方便个人学习参考使用 http://blog.csdn.net/rainchxy/article/details/77946835 数据结构 第3讲 顺序表 顺序表是最简单的一种线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空,所以插入.删除时需要移动大量元素. 顺序表可以分配一段连续的存储空间Maxsize,用elem记录基地址,用length记录实际的元素个数,即顺序表的长度, 结构体的定义: 结构体定义后,如果要定义个顺序

【数据结构】线性表&amp;&amp;顺序表详解和代码实例

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 预备知识 1.0 什么是线性表? 线性表(List)是零个或者多个数据元素的有限序列. 首先它是一个序列.里面的元素是有顺序的,如果有多个元素,除开头和结尾以外的元素都有一个前驱和一个后继.而开头元素只有后继,结尾元素只有前驱. 其次线性表是有限的,也就是里面的元素个数是有限的. 1.1 线性表的基本操作(描述) 1ADT 线性表(List) 2Data 3    线性表的数据对象集合为{a1, a2, a3, ...