数据结构(严蔚敏)算法2.3-算法2.4
标签:eof lib 初始 scanf ror color 声明 struct 结构
1 //线性表的插入与删除
2 #include 3 #include 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){
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)
36 printf("%d ",L.elem[i]);
37 }
38
39 printf("请输入要删除的位置");
40 scanf("%d",&i);
41 if(ListDelete(&L,i)){
42 for(i=0;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(i1||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(i1||i>L->length) return ERROR;//i值不合法
74 p=&(L->elem[i-1]);//被删除元素的位置
75 q=L->elem+L->length-1;//表尾元素的位置
76 for(++p;p1)=*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
评论