码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-01 11:58:01      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:eof   lib   初始   scanf   ror   color   声明   struct   结构   

 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  }

 

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

标签:eof   lib   初始   scanf   ror   color   声明   struct   结构   

原文地址:https://www.cnblogs.com/suqf/p/9734279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!