码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构题 Big Bang

时间:2017-09-20 23:20:10      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:单位   容量   show   lan   lists   problem   nbsp   exit   tar   

题目链接:点我点我

题意:线性表的一些操作

题解:书上模板

  1 //Big Bang 
  2 #include <string.h>
  3 #include <malloc.h>
  4 #include <stdio.h>
  5 #include <stdlib.h>
  6 #include <math.h>
  7 
  8 #define TRUE 1
  9 #define FALSE 0
 10 #define OK 1
 11 #define ERROR 0
 12 #define INFEASIBLE -1
 13 #define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量
 14 #define LISTINCREMENT 2 //线性表存储空间的分配增量
 15 
 16 typedef int Status;
 17 typedef int Boolean;
 18 
 19 typedef struct{
 20     char name[55];
 21 }ElemType;
 22 
 23 typedef struct{
 24     ElemType *elem; //存储空间基址
 25     int length; //当前长度
 26     int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) 
 27 }SqList;
 28 
 29 Status InitList(SqList *L){ //算法2.3 构造一个空的顺序线性表 
 30     (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
 31     if(!(*L).elem) exit(OVERFLOW); //存储分配失败 
 32     (*L).length=0; //空表长度为0
 33     (*L).listsize=LIST_INIT_SIZE; //初始存储容量
 34     return OK;
 35 }
 36 
 37 Status ListInsert(SqList *L,int i,ElemType e){ //算法2.4 在L中第i个位置之前插入新的数据元素e,L的长度加1
 38     //初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 
 39     ElemType *newbase,*q,*p;
 40     if(i<1||i>(*L).length+1) return ERROR; //i的值不合法
 41     if((*L).length>=(*L).listsize){ //当前存储空间已满,增加分配 
 42         newbase=(ElemType*)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(ElemType));
 43         if(!newbase) exit(OVERFLOW); //存储分配失败
 44         (*L).elem=newbase; //新基址
 45         (*L).listsize+=LISTINCREMENT; //增加存储容量 
 46     } 
 47     q=(*L).elem+i-1;
 48     for(p=(*L).elem+(*L).length-1;p>=q;--p) *(p+1)=*p; //插入位置及之后的元素左移 
 49     *q=e;
 50     ++(*L).length; //表长增1 
 51     return OK;
 52 }
 53 
 54 Status ListDelete(SqList *L,int i,ElemType *e){ //算法2.5 删除L的第i个数据元素,并用e返回其值,L的长度减1
 55    //初始条件:顺序线性表L已存在,1≤i≤ListLength(L)
 56    ElemType *p,*q;
 57    if(i<1||i>(*L).length) return ERROR; //i值不合法 
 58    p=(*L).elem+i-1; //p为被删除元素的位置
 59    *e=*p; //被删除元素的值赋给e
 60    q=(*L).elem+(*L).length-1; //表尾元素的位置
 61    for(++p;p<=q;++p) *(p-1)=*p; //被删除元素之后的元素左移
 62    (*L).length--; //表长减一 
 63    return OK;
 64 }
 65  
 66 
 67 Status ListTraverse(SqList L,void(*vi)(ElemType*)){ //依次对L的每个数据元素调用函数vi().一旦vi()失败,则操作失败
 68     //初始条件:顺序线性表L已存在
 69     ElemType *p;
 70     p=L.elem;
 71     for(int i=1;i<=L.length;i++){
 72         if(i!=1) printf(" ");
 73         vi(p++);
 74     }
 75     printf("\n");
 76     return OK;
 77 } 
 78 
 79 int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType)){ 
 80     //算法2.6 在顺序线性表中第1个值与e满足compare()的元素的位序
 81     //若找到,则返回其在L中的位序,否则返回0
 82     int i=1;//i的初值为第1个元素的位序 
 83     ElemType *p;//p的初值为第1个元素的存储为位置 
 84     p=L.elem;
 85     while(i<=L.length&&!(*compare)(*p++,e)) ++i;
 86     if(i<=L.length) return i;
 87     else return 0;
 88 }
 89 
 90 void ListShow(SqList L){
 91     for(int i=0;i<L.length;i++){
 92         if(i) printf(" ");
 93         printf("%s",L.elem[i].name);
 94     }
 95     printf("\n");
 96 }
 97 
 98 Status cmp(ElemType e1,ElemType e2){
 99     return (Status)!strcmp(e1.name,e2.name);
100 }
101 
102 int main(){
103     SqList namelist;
104     InitList(&namelist);
105     char op[10];
106     int pos;
107     ElemType e;
108     while(scanf("%s",op)!=EOF){
109         if(!strcmp(op,"insert")){
110             scanf("%d%s",&pos,e.name);
111             ListInsert(&namelist,pos,e);
112         }
113         else if(!strcmp(op,"delete")){
114             scanf("%s",e.name);
115             pos=LocateElem(namelist,e,cmp);  
116             ListDelete(&namelist,pos,&e);
117         }
118         else if(!strcmp(op,"show")){
119             ListShow(namelist);
120         }
121         else if(!strcmp(op,"search")){
122             scanf("%s",e.name);
123             printf("%d\n",LocateElem(namelist,e,cmp));
124         }
125     }
126     return 0;
127 }

 

数据结构题 Big Bang

标签:单位   容量   show   lan   lists   problem   nbsp   exit   tar   

原文地址:http://www.cnblogs.com/Leonard-/p/7565245.html

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