数据结构(严蔚敏)算法2.3-算法2.4

 1 //线性表的插入与删除 
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define LIST_INIT_SIZE 100   //线性表存储空间的初试分配量
 5 #define LISTINCREMENT 10      //线性表存储空间的分配增量
 6 #define ERROR 0
 7 #define OK 1 
 8 typedef struct{
 9     int *elem; //存储空间的基址 
10     int length;//当前长度 
11     int listsize;//当前分配的存储容量 
12 }Sqlist;
13 //函数声明 
14 int Initlist(Sqlist *L);//线性表的初始化 
15 int ListInsert(Sqlist *L,int i,int e);//在顺序表第I个位置之前插入新元素e
16 int ListDelete(Sqlist *L,int i);//删除第i个元素 
17 int main(void){
18     Sqlist L;
19     int i,len,e;
20     if(Initlist(&L)){
21     printf("请输入线性表的长度");
22     scanf("%d",&len);
23     L.length=len;
24     printf("请输入线性表的元素");
25     for(i=0;i<len;i++){
26         scanf("%d",L.elem+i);
27         L.listsize--;
28     }
29     printf("请输入要插入的元素");
30     scanf("%d",&e);
31     printf("请输入要插入的位置");
32     scanf("%d",&i);    
33 }
34     if(ListInsert(&L,i,e)){
35         for(i=0;i<L.length;i++)
36             printf("%d ",L.elem[i]);
37     }
38     
39     printf("请输入要删除的位置");
40     scanf("%d",&i);
41     if(ListDelete(&L,i)){
42         for(i=0;i<L.length;i++)
43             printf("%d ",L.elem[i]);
44     }
45     return 0;
46 }
47 
48  int Initlist(Sqlist *L){
49      L->elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
50      if(!L->elem) exit(ERROR);
51     L->length=0;
52     L->listsize=LIST_INIT_SIZE;
53     return OK; 
54  }
55  int ListInsert(Sqlist *L,int i,int e){
56      int *newbase,*q,*p,a;
57      if(i<1||i>L->length+1) return ERROR;  //I值不合法 
58      if(L->length>=L->listsize){  //当前存储空间已满 
59          newbase=(int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
60          if(!newbase) exit(ERROR); //存储分配失败 
61          L->elem=newbase;//新基址 
62          L->listsize+=LISTINCREMENT;//增加存储容量 
63      }
64     q=&(L->elem[i-1]);
65     a=L->length;
66     for(p=&(L->elem[a-1]);p>=q;--p)    *(p+1)=*p;
67     *q=e;
68     ++L->length;
69     return OK;
70  }
71  int ListDelete(Sqlist *L,int i){
72      int *p,*q; 
73      if(i<1||i>L->length) return ERROR;//i值不合法 
74     p=&(L->elem[i-1]);//被删除元素的位置 
75     q=L->elem+L->length-1;//表尾元素的位置 
76     for(++p;p<=q;++p)    *(p-1)=*p;//被删元素之后的元素向左移动 
77     --L->length;//表长减1 
78     return OK;
79  }

 

posted on 2018-10-01 10:58 QingFD 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/suqf/p/9734279.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值