zoukankan      html  css  js  c++  java
  • [c/c++] C数据结构: 顺序表 Sequence List

     1 #include "stdio.h"
     2 #include "stdlib.h"
     3 
     4 #define MAXSIZE 10
     5 
     6 typedef int ElemType;
     7 typedef struct {
     8     int *elem;
     9     int length;
    10     int listsize;
    11 } Sqlist;
    12 
    13 // 初始化顺序表
    14 void
    15 initSqlist(Sqlist *L) {
    16     L->elem = (int *) malloc(MAXSIZE * sizeof(ElemType));
    17     if(!L->elem) exit(0);
    18     L->length = 0;
    19     L->listsize = MAXSIZE;
    20 }
    21 
    22 // 向顺序表插入元素 
    23 void
    24 insertSqlistElem(Sqlist *L,int i,ElemType item) {
    25     ElemType *base,*insertPtr,*p;
    26 
    27     if(i < 1 || i > L->length + 1) exit(0); // 为啥要+1 是因为有向顺序表末尾追加
    28 
    29     if(L->length >= L->listsize) { // 需要申请更多的空间
    30         base = (ElemType *) realloc(L->elem,(L->listsize + 10) * sizeof(ElemType));
    31         L->elem = base;
    32         L->listsize = L->listsize + 10;
    33     }
    34     insertPtr = &(L->elem[i-1]); // 要插入的元素的启始位置
    35     // 从末尾开始到插入点,所有的数据向前移
    36     for(p = &L->elem[L->length - 1]; p >= insertPtr; p--) {
    37         *(p + 1) = *p;
    38     }
    39     *insertPtr = item;
    40     L->length++;
    41 } 
    42 
    43 // 从顺序表删除元素
    44 void 
    45 deleteSqlistElem(Sqlist *L,int i) {
    46     ElemType *deleteElem,*q;
    47 
    48     if(i < 1 || i > L->length) exit(0);
    49 
    50     deleteElem = &(L->elem[i - 1]);
    51     q = L->elem + L->length - 1;
    52     // 从删除位置开始,后面的数据向前移
    53     for(++deleteElem; deleteElem <= q; ++deleteElem) *(deleteElem - 1) = *deleteElem;
    54     L->length--;
    55 }
    56 
    57 // 打印输出顺序表
    58 void 
    59 printSqlist(Sqlist *L) {
    60     int i;
    61     for(i = 0; i < L->length; i++) printf("%d ",L->elem[i]);
    62     printf("\n");
    63 }
    64 
    65 int
    66 main() {
    67     Sqlist sqlist;
    68     int    i;
    69 
    70     initSqlist(&sqlist);
    71     for(i = 0; i < 15; i++) insertSqlistElem(&sqlist, i+1,i+1);
    72     printf("\nThe content of the list is \n");
    73     printSqlist(&sqlist);
    74 
    75     deleteSqlistElem(&sqlist,5);
    76     printf("\nDelete the fifth element\n");
    77     printSqlist(&sqlist);
    78 
    79     return 0;
    80 }
  • 相关阅读:
    ASP.NET Web开发框架之二 数据输入窗体
    针对HTML5的更新和Unobtrusive Validation
    框架:从MVC到开放API
    使用SSIS创建同步数据库数据任务
    MVC里的Filters
    类型构造器也称为静态构造器,类构造器,或类型初始化器
    铁道部新客票系统设计(二)
    深入浅出SQL Server中的死锁
    你所能用到的数据结构(一)
    python网络编程学习笔记(6):Web客户端访问
  • 原文地址:https://www.cnblogs.com/bluefrog/p/2630816.html
Copyright © 2011-2022 走看看