• 顺序表C语言版


      1 #include <stdio.h>
      2 /*
      3  * 顺序表最多输入N个数
      4  */
      5 #define N 10
      6 #define OK 1
      7 #define ERROR -1
      8 
      9 
     10 struct sequeuelist {
     11     int *elem;
     12     int length;
     13     int listsize;
     14 };
     15 /*
     16  * 因为l是指针,所以请注意->的使用,而不是L.
     17  */
     18 int sequeuelist_init(struct sequeuelist *l) {
     19     l->elem = (int *)malloc(N * sizeof(int));
     20     if (!l->elem) {
     21         return ERROR;
     22     }
     23     l->length = 0;/* 空表长度为0 */
     24     l->listsize = N;/* 初始存储容量 */
     25     return OK;
     26 }
     27 /*
     28  * 插入函数,在实验时,可暂不考虑空间不足的情况
     29  */
     30 int sequeuelist_insert(struct sequeuelist *l, int i, int e) {
     31     int *q = NULL;
     32     int *p = NULL;
     33     q = &(l->elem[i-1]);
     34     for (p = &(l->elem[l->length]); p > q; --p) {
     35         *(p+1) = *p;
     36     }
     37     *q = e;
     38     l->length++;
     39     return OK;
     40 }
     41 /*
     42  * 输出顺序表所有结点的值
     43  */
     44 int sequeuelist_print(struct sequeuelist *l) {
     45 
     46 
     47     int *start = NULL;
     48     int *stop = NULL;
     49 
     50     stop = &(l->elem[l->length]);
     51     for (start = &(l->elem[0]); start< stop; start++) {
     52         printf("%d	", *start);
     53     }
     54     printf("
    ");
     55 }
     56 
     57 /*
     58  * 顺序表l,从第i各元素起,连续删除k个元素。
     59  */
     60 int sequeuelist_delete_ith_to_kth(struct sequeuelist *l, int i, int k)
     61 {
     62         int *p = NULL;/*如果p为指向struct squeue的指针类型,则p++后,p增加的是struct squeue类型成员的长度*/
     63         int *q = NULL;
     64         int *r = NULL;
     65         int length_temp = l->length-1;
     66         p = &(l->elem[i-1]);
     67         r = &(l->elem[length_temp]);
     68         for (q = &(l->elem[i+k-1]); q <= &(l->elem[length_temp]); /*q++*/) {
     69                 *(p++) = *q;
     70                 q++;
     71                 l->length--;
     72         }
     73 
     74         return OK;
     75 }
     76 /*
     77  *
     78  */
     79 int main(void) {
     80     int i;
     81     int e;
     82     int n = 10;
     83     struct sequeuelist *l = NULL;
     84     struct sequeuelist M;
     85     l = &M;
     86 
     87     sequeuelist_init(l);
     88     printf("Please input n numbers:
    ");
     89     /*
     90      * 由于线性表的下标是从0开始的
     91      */
     92     for (i = 1; i <= n; i++) {/* 创建初始的顺序表,包含n个数 */
     93         scanf("%d", &e);
     94         sequeuelist_insert(l, i, e);
     95     }
     96     sequeuelist_print(l);/*输出各结点的值*/
     97     ///*
     98     //sequeuelist_insert(l, 3, 999);/*在第三个元素前插入999*/
     99     //printf("After insert:
    ");
    100     //*/
    101     //sequeuelist_print(M);/*输出插入后各结点的值*/
    102     sequeuelist_delete_ith_to_kth(l, 3, 4);
    103     sequeuelist_print(l);
    105 return 0; 106 }
    转载本Blog文章请注明出处,否则,本作者保留追究其法律责任的权利。 本人转载别人或者copy别人的博客内容的部分,会尽量附上原文出处,仅供学习交流之用,如有侵权,联系立删。
  • 相关阅读:
    s=a+aa+aaa+aaaa+aa...aaaa
    ibatis入门
    ibatis多参数的问题
    异步分页ajax
    8M的摄像头,30fps摄像时,60hz的LCD刷新频率,请问camera每秒向BB传输多少数据,如何计算
    android tcp通讯
    為什麼我的手機連Wi-Fi速度總是卡在75Mbps?Wi-Fi速度解惑~帶你一次看懂!
    mbps和MB/s是怎么换算的
    简说各种wifi无线协议的传输速率
    mil,mm与inch之间的转换
  • 原文地址:https://www.cnblogs.com/drfxiaoliuzi/p/4691186.html
Copyright © 2020-2023  润新知