2017-09-24 无所事事刷anyview的日子(chapter 03~04) 持续更新中……赶紧刷完anyview然后继续学习老本行…… DC031、直接插入排序 12345678910111213141516171819202122232425/**********【题目】试以顺序表L的L.rcd[L.length+1]作为监视哨,改写教材3.2节中给出的升序直接插入排序算法。顺序表的类型RcdSqList定义如下:typedef struct { KeyType key; ... } RcdType;typedef struct { RcdType rcd[MAXSIZE+1]; // rcd[0]闲置 int length;} RcdSqList;**********/void InsertSort(RcdSqList &L){ int i,j; for(i=1;i<L.length;++i) if(L.rcd[i+1].key<L.rcd[i].key) { L.rcd[L.length+1]=L.rcd[i+1]; j=i+1; do{j--;L.rcd[j+1]=L.rcd[j]; } while(L.rcd[L.length+1].key<L.rcd[j-1].key); L.rcd[j]=L.rcd[L.length+1]; }} DC04哈希表123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354/**********【题目】假设哈希表长为m,哈希函数为H(x),用链地址法处理冲突。试编写输入一组关键字并建造哈希表的算法。哈希表的类型ChainHashTab定义如下:#define NUM 7#define NULLKEY -1#define SUCCESS 1#define UNSUCCESS 0#define DUPLICATE -1typedef char HKeyType;typedef struct HNode { HKeyType data; struct HNode* next;}*HLink;typedef struct { HLink *rcd; // 指针存储基址,动态分配数组 int count; // 当前表中含有的记录个数 int size; // 哈希表的当前容量}ChainHashTab; // 链地址哈希表int Hash(ChainHashTab H, HKeyType k) { // 哈希函数 return k % H.size;}Status Collision(ChainHashTab H, HLink &p) { // 求得下一个探查地址p if (p && p->next) { p = p->next; return SUCCESS; } else return UNSUCCESS;}**********/int BuildHashTab(ChainHashTab &H, int n, HKeyType es[]) /* 直接调用下列函数 *//* 哈希函数: *//* int Hash(ChainHashTab H, HKeyType k); *//* 冲突处理函数: *//* int Collision(ChainHashTab H, HLink &p); */{ HLink p,q; int i,pos; for(i=0;i<n;i++) H.rcd[i]->next=NULL; for(i=0;i<n;i++) { q=(HNode*)malloc(sizeof(HNode)); q->data=es[i];q->next=NULL; //建立新结点 pos=Hash(H,es[i]); //查找位置 p=H.rcd[pos]; while(p->data!=q->data&&p->next) Collision(H,p); //确定是否出现过 if(p->data!=q->data) { //新元素,插在前面 q->next=H.rcd[pos]; H.rcd[pos]=q; } } return OK ; } 1234567891011121314151617181920212223242526272829303132333435363738/**********【题目】已知某哈希表的装载因子小于1,哈希函数H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。哈希表的类型HashTable定义如下:#define SUCCESS 1#define UNSUCCESS 0#define DUPLICATE -1typedef char StrKeyType[4];typedef struct { StrKeyType key; // 关键字项 int tag; // 标记 0:空;1:有效; -1:已删除 void *any; // 其他信息} RcdType;typedef struct { RcdType *rcd; // 存储空间基址 int size; // 哈希表容量 int count; // 表中当前记录个数} HashTable;**********/void PrintKeys(HashTable ht, void(*print)(StrKeyType))/* 依题意用print输出关键字 */{ int n,i,size; char c; size=11; for(c='A';c<='Z';c++) { n=(c-'A')%size; i=n; while((n+1)%size!=i) { if(ht.rcd[n].key[0]==c&&ht.rcd[n].tag==1) print(ht.rcd[n].key); n=(n+1)%size; } }} Newer 框架学习之vue.js Older 无所事事刷anyview的日子(chapter 01~02)