【數據結構】順序線性表的實現與基本操做

自打在知乎上看到思否這個平臺後,就總想寫點什麼;也想與更多的人交流,學一點東西。
學校數據結構授課用的教材是嚴蔚敏老師的《數據結構(C語言版)》,教材將介於僞碼和C語言之間的類C語言做爲描述工具講解算法,在實際學習中,仍是須要咱們把代碼轉換成C語言程序,編譯經過。這個過程才能幫助更好地理解算法。
我開通博客的目的也在於此,將本身復現的代碼和完成的課後習題記錄下來,與你們分享交流;偶爾也分享一些本身對一些開源項目的學習理解。
第一次的內容很是簡單,順序表的基本操做。主要包括了:c++

  1. 構建空表
  2. 插入元素
  3. 刪除元素
  4. 查找元素

功能簡單,編譯時遇到的困難也較少。算法

#include<stdio.h>
#include<stdlib.h>
#include "malloc.h" 

#define TRUE         1
#define FALSE        0
#define OK           1
#define ERROR        0
#define INFEASIBLE   -1
#define OVERFLOW     -2
#define LIST_INIT_SIZE   100
#define LISTINCREMENT    10

typedef int Status;
typedef struct{
    int *elem;
    int length;
    int listsize;
}SqList;

Status InitList_Sq(SqList &L){
    //構造空表
    L.elem = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
    if(!L.elem)exit(OVERFLOW);
    L.length = 0;
    L.listsize = LIST_INIT_SIZE;
    return OK; 
}
Status ListInsert_Sq(SqList &L,int i){
    //在順序表的第i個位置插入鍵盤輸入的數 
    int* p,* q,e;
    if(i < 1 || i > L.length + 1)return ERROR;
    if(L.length >= L.listsize){
        int* newbase = (int*)realloc(L.elem,(L.listsize + LISTINCREMENT) * sizeof(int));
        if(!newbase)exit(OVERFLOW);
        L.elem = newbase;
        L.listsize += LISTINCREMENT;
    }
    q = &(L.elem[i-1]);
    for(p = &(L.elem[L.length-1]);p >= q;--p) *(p+1) = *p;
    scanf("%d",&e); //鍵盤輸入值賦給e
    *q = e;
    ++ L.length;
    return OK; 
}
Status List_Print(SqList L){
    //打印順序表中的數
    for(int r = 0;r < L.length;r++)printf("%d ",L.elem[r]);
    printf("\n");
}
Status List_Search(SqList L){
    //查找順序表
    int i; 
    scanf("%d",&i); 
    if(i < 1 || i > L.length + 1)return ERROR;
    printf("您查找的數是:%d \n",L.elem[i-1]);
}
Status ListDelete_Sq(SqList &L){
    //刪除指定的數,並用e返回 
    int* p,* q;
    int i,e; 
    scanf("%d",&i);
    if(i < 1 || i > L.length + 1)return ERROR;
    p = &(L.elem[i-1]);
    e = *p;
    q = L.elem + L.length - 1;
    for(++p;p <= q;++p)*(p-1) = *p;
    --L.length;
    printf("%d被刪除了\n",e);
    return OK;
}
int main()
{
    SqList L;
    InitList_Sq(L);
    printf("請爲順序表輸入4個整數:\n");
    for(int a = 1;a <= 4;a++)ListInsert_Sq(L,a);
    printf("現有的順序表爲:\n");
    List_Print(L);
    printf("請輸入要查找的位置\n");
    List_Search(L);
    printf("請輸入插入的位置和數(用換行分開):\n");
    int a;
    scanf("%d",&a);
    ListInsert_Sq(L,a);
    printf("現有的順序表爲:\n");
    List_Print(L);
    printf("請輸入要刪除的位置\n");
    ListDelete_Sq(L);
    printf("現有的順序表爲:\n");
    List_Print(L);
    return 0;}

所用的編譯器是dev c++.數據結構

相關文章
相關標籤/搜索