7种数据结构

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

次序表

sqlite.h

  1. #ifndef __SEQLIST_H__
  2. #define __SEQLIST_H__  
  3. typedef struct        person {
  4.         char name[32];
  5.         char sex;
  6.         int age;
  7.         int score;
  8. }DATATYPE;
  9. // typedef int DATAYPE;
  10. typedef struct list {
  11.         DATATYPE *head;
  12.         int tlen;
  13.         int clen;
  14. }SeqList;
  15. SeqList *CreateSeqList(int len);
  16. int DestroySeqList(SeqList *list);
  17. int ShowSeqList(SeqList *list);
  18. int InsertTailSeqList(SeqList *list, DATATYPE* data);
  19. int IsFullSeqList(SeqList *list);
  20. int IsEmptySeqList(SeqList *list);
  21. int InsertPosSeqList(SeqList *list, DATATYPE* data, int pos);
  22. int FindSeqList(SeqList *list, char *name);
  23. int ModifySeqList(SeqList *list, char *old, DATATYPE *newdata);
  24. int DeleteSeqList(SeqList *list, char *name);
  25. int ClearSeqList(SeqList *list);
  26. int GetSizeSeqList(SeqList*list);
  27. DATATYPE* GetDataType(SeqList*list,int pos);
  28. #endif
复制代码
seqlite.c

  1. #include "seqlist.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. SeqList *CreateSeqList(int len)
  6. {
  7.     SeqList* sl = (SeqList*)malloc(sizeof(SeqList));
  8.     if(NULL == sl)
  9.     {
  10.         printf("malloc 1 error\n");
  11.         return NULL;
  12.     }
  13.     sl->head = (DATATYPE*)malloc(sizeof(DATATYPE)*len);
  14.     if(NULL == sl->head)
  15.     {
  16.         printf("malloc 1 error\n");
  17.         return NULL;
  18.     }
  19.     sl->tlen = len;
  20.     sl->clen = 0;
  21.     return sl;
  22. }
  23. int InsertTailSeqList(SeqList *list, DATATYPE* data)
  24. {   
  25.    
  26.     if(IsFullSeqList(list))
  27.     {
  28.         return 1;
  29.     }
  30.     //strcpy
  31.     memcpy(&list->head[list->clen],data,sizeof(DATATYPE));
  32.     list->clen++;
  33.     return 0;
  34. }
  35. int IsFullSeqList(SeqList* list)
  36. {
  37.     return list->clen  == list->tlen ;
  38. }
  39. int GetSizeSeqList(SeqList*list)
  40. {
  41.     return list->clen ;
  42. }
  43. int ShowSeqList(SeqList *list)
  44. {
  45.     int i = 0 ;
  46.     int len = GetSizeSeqList(list);
  47.     for(i = 0;i<len;i++)
  48.     {
  49.         
  50.         printf("%s %c %d %d\n",list->head[i].name,
  51.                list->head [i].sex,list->head[i].age,list->head[i].score );
  52.     }
  53. }
  54. int IsEmptySeqList(SeqList *list)
  55. {
  56.     return 0 ==list->clen ;
  57. }
  58. int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)
  59. {
  60.     if(pos<0 ||pos>list->clen)
  61.     {
  62.         return 1;
  63.     }
  64.     if(IsFullSeqList(list))
  65.     {
  66.         return 1;
  67.     }
  68.     for(int i= list->clen ;i>pos;i--)
  69.     {
  70.         list->head[i]= list->head[i-1];
  71.     }
  72.     memcpy(&list->head[pos],data,sizeof(DATATYPE));
  73.     list->clen ++;
  74.     return 0;
  75. }
  76. int FindSeqList(SeqList *list, char *name)
  77. {
  78.     int len = GetSizeSeqList(list);
  79.     int i = 0 ;
  80.     for(i=0;i<len;i++)
  81.     {
  82.    
  83.         if(0== strcmp(list->head [i].name,name))
  84.         {
  85.         
  86.             return i;
  87.         }
  88.     }
  89.     return -1;
  90. }
  91. DATATYPE* GetDataType(SeqList*list,int pos)
  92. {
  93.     return &list->head[pos];
  94. }
  95. int ClearSeqList(SeqList *list)
  96. {
  97.     list->clen = 0;
  98.     return 0;   
  99. }
  100. int DestroySeqList(SeqList *list)
  101. {
  102.     free(list->head);
  103.     free(list);
  104.     return 0;
  105. }
  106. int ModifySeqList(SeqList *list, char *old, DATATYPE *newdata)
  107. {
  108.     int i = FindSeqList(list,old);
  109.     if(-1 == i)
  110.     {
  111.         return 1;
  112.     }
  113.     //list->head[i] = *newdata;
  114.     memcpy(&list->head[i],newdata,sizeof(DATATYPE));
  115.     return 0;
  116. }
  117. int DeleteSeqList(SeqList *list, char *name)
  118. {
  119.     int pos = FindSeqList(list, name);
  120.     if(-1 == pos)
  121.     {
  122.         return 1;
  123.     }
  124.     int len  =GetSizeSeqList(list);
  125.     int i = 0 ;
  126.     for(i=pos;i<len;i++)   
  127.     {
  128.          memcpy(&list->head[i],&list->head[i+1],sizeof(DATATYPE));
  129.     }
  130.     list->clen--;
  131.     return 0;
  132. }
复制代码
单链表

linklist.c

  1. #include "linklist.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. LinkList *CreateLinkList() {
  6.   LinkList *ll = (LinkList *)malloc(sizeof(LinkList));
  7.   if (NULL == ll) {
  8.     printf("CreateLinkList malloc\n");
  9.     return NULL;
  10.   }
  11.   ll->head = NULL;
  12.   ll->clen = 0;
  13.   return ll;
  14. }
  15. int InsertHeadLinkList(LinkList *list, DATATYPE *data) {
  16.   LinkNode *newnode = (LinkNode *)malloc(sizeof(LinkNode));
  17.   if (NULL == newnode) {
  18.     printf("InsertHeadLinkList malloc\n");
  19.     return 1;
  20.   }
  21.   memcpy(&newnode->data, data, sizeof(DATATYPE));
  22.   newnode->next = NULL;
  23.   if (IfEmptyLinkList(list)) // empty
  24.   {
  25.     list->head = newnode;
  26.   } else {
  27.     newnode->next = list->head;
  28.     list->head = newnode;
  29.   }
  30.   list->clen++;
  31.   return 0;
  32. }
  33. int IfEmptyLinkList(LinkList *list) { return 0 == list->clen; }
  34. int ShowLinkList(LinkList *list) {
  35.   LinkNode *tmp = list->head;
  36.   while (tmp) {
  37.     printf("%s %d\n", tmp->data.name, tmp->data.age);
  38.     tmp = tmp->next; // i++
  39.   }
  40.   return 0;
  41. }
  42. // LinkNode *FindLinkList(LinkList *list, char *name)
  43. LinkNode *FindLinkList(LinkList *list, PFUN fun, void *arg) {
  44.   LinkNode *tmp = list->head;
  45.   while (tmp) {
  46.     // if(0==strcmp(tmp->data.name,name))
  47.     if (fun(&tmp->data, arg)) {
  48.       return tmp;
  49.     }
  50.     tmp = tmp->next; // i++
  51.   }
  52.   return NULL;
  53. }
  54. int InsertTailLinkList(LinkList *list, DATATYPE *data) {
  55.   LinkNode *newnode = (LinkNode *)malloc(sizeof(LinkNode));
  56.   if (NULL == newnode) {
  57.     printf("InsertTailLinkList malloc\n");
  58.     return 1;
  59.   }
  60.   memcpy(&newnode->data, data, sizeof(DATATYPE));
  61.   newnode->next = NULL;
  62.   if (IfEmptyLinkList(list)) {
  63.     list->head = newnode;
  64.   } else {
  65.     LinkNode *tmp = list->head;
  66.     while (tmp->next) {
  67.       tmp = tmp->next;
  68.     }
  69.     tmp->next = newnode;
  70.   }
  71.   list->clen++;
  72.   return 0;
  73. }
  74. int InsertPosLinkList(LinkList *list, DATATYPE *data, int pos) {
  75.   int len = GetSizeLinkList(list);
  76.   if (pos < 0 || pos > len) {
  77.     return 1;
  78.   }
  79.   if (0 == pos) {
  80.     return InsertHeadLinkList(list, data);
  81.   } else if (pos == len) {
  82.     return InsertTailLinkList(list, data);
  83.   } else //中间位置
  84.   {
  85.     LinkNode *newnode = (LinkNode *)malloc(sizeof(LinkNode));
  86.     if (NULL == newnode) {
  87.       printf("InsertTailLinkList malloc\n");
  88.       return 1;
  89.     }
  90.     memcpy(&newnode->data, data, sizeof(DATATYPE));
  91.     newnode->next = NULL;
  92.     LinkNode *tmp = list->head;
  93.     int i = 0;
  94.     for (i = 0; i < pos - 1; i++) {
  95.       tmp = tmp->next;
  96.     }
  97.     newnode->next = tmp->next;
  98.     tmp->next = newnode;
  99.   }
  100.   list->clen++;
  101.   return 0;
  102. }
  103. int GetSizeLinkList(LinkList *list) { return list->clen; }
  104. int DeleteHeadLinklist(LinkList *list) {
  105.   if (IfEmptyLinkList(list)) {
  106.     return 1;
  107.   }
  108.   LinkNode *tmp = list->head;
  109.   list->head = tmp->next;
  110.   free(tmp);
  111.   list->clen--;
  112.   return 0;
  113. }
  114. int DeleteTailLinkList(LinkList *list) {
  115.   if (IfEmptyLinkList(list)) {
  116.     return 1;
  117.   }
  118.   int len = GetSizeLinkList(list);
  119.   if (1 == len) {
  120.     free(list->head);
  121.     list->head = NULL;
  122.   } else {
  123.     LinkNode *tmp = list->head;
  124.     LinkNode *tmp1 = list->head;
  125.     while (tmp->next) {
  126.       tmp1 = tmp; // tmp1 比tmp晚一步
  127.       tmp = tmp->next;
  128.     }
  129.     free(tmp);
  130.     tmp1->next = NULL;
  131.   }
  132.   list->clen--;
  133.   return 0;
  134. }
  135. int DeletePosLinkList(LinkList *list, int pos) {
  136.   int len = GetSizeLinkList(list);
  137.   if (IfEmptyLinkList(list)) {
  138.     return 1;
  139.   }
  140.   if (0 == pos) {
  141.     DeleteHeadLinklist(list);
  142.   } else if (len - 1 == pos) // len 4
  143.   {
  144.     DeleteTailLinkList(list);
  145.   } else //中间
  146.   {
  147.     LinkNode *tmp = list->head;
  148.     LinkNode *tmp1 = list->head;
  149.     for (int i = 0; i < pos; i++) {
  150.       tmp1 = tmp;
  151.       tmp = tmp->next;
  152.     }
  153.     tmp1->next = tmp->next;
  154.     free(tmp);
  155.     list->clen--;
  156.   }
  157.   return 0;
  158. }
  159. int ModifyLinkList(LinkList *list, PFUN fun, void *arg, DATATYPE *newdata) {
  160.   LinkNode *tmp = FindLinkList(list, fun, arg);
  161.   if (NULL == tmp) {
  162.     return 1;
  163.   }
  164.   memcpy(&tmp->data, newdata, sizeof(DATATYPE));
  165.   return 1;
  166. }
  167. int DestroyLinkList(LinkList *list) {
  168.   int len = GetSizeLinkList(list);
  169.   for (int i = 0; i < len; i++) {
  170.     DeleteHeadLinklist(list);
  171.   }
  172.   free(list);
  173.   return 0;
  174. }
  175. LinkNode *FindMidLinkList(LinkList *list) {
  176.   if (IfEmptyLinkList(list)) {
  177.     return NULL;
  178.   }
  179.   LinkNode *pfast = list->head;
  180.   LinkNode *pslow = list->head;
  181.   while (pfast) {
  182.     pfast = pfast->next; // pfast = pfast->next->next;
  183.     if (pfast) {
  184.       pfast = pfast->next;
  185.       pslow = pslow->next;
  186.     } else {
  187.       break;
  188.     }
  189.   }
  190.   return pslow;
  191. }
  192. LinkNode *FindRevKLinkList(LinkList *list, int k) {
  193.   if (IfEmptyLinkList(list)) {
  194.     return NULL;
  195.   }
  196.   LinkNode *pfast = list->head;
  197.   LinkNode *pslow = list->head;
  198.   int i = 0;
  199.   for (i = 0; i < k; i++) {
  200.     pfast = pfast->next;
  201.     if (NULL == pfast) {
  202.       return pslow;
  203.     }
  204.   }
  205.   while (pfast) {
  206.     pfast = pfast->next;
  207.     // if (NULL==pfast)
  208.     // {
  209.     //   break;
  210.     // }
  211.     pslow = pslow->next;
  212.   }
  213.   return pslow;
  214. }
  215. int RevertLinkList(LinkList *list) {
  216.   LinkNode *prev = NULL;
  217.   LinkNode *tmp = list->head;
  218.   LinkNode *next = list->head->next;
  219.   while (1) {
  220.     tmp->next = prev;
  221.     prev = tmp;
  222.     tmp = next;
  223.     if (NULL == tmp) {
  224.       break;
  225.     }
  226.     next = next->next;
  227.   }
  228.   list->head = prev;
  229.   return 0;
  230. }
  231. int InsertSortLinkList(LinkList *list)
  232. {
  233.   LinkNode* phead = list->head;
  234.   LinkNode* pinsert = phead->next;
  235.   LinkNode* pnext = pinsert->next;
  236.   phead->next = NULL;
  237.   while(1)
  238.    {
  239.     phead = list->head;
  240.     while(phead->next != NULL && pinsert->data.age > phead->data.age &&
  241.           pinsert->data.age > phead->next->data.age)
  242.     {
  243.       phead = phead->next;
  244.     }
  245.     if(pinsert->data .age <phead -> data.age) // head insert
  246.     {
  247.       pinsert->next = list->head;
  248.       list->head = pinsert;
  249.     }
  250.     else
  251.     {
  252.       pinsert->next = phead->next;
  253.       phead->next = pinsert;
  254.     }
  255.     pinsert = pnext;
  256.     if(NULL == pinsert)
  257.     { break; }
  258.     pnext = pnext->next;
  259.    
  260.   }
  261.   return 0;
  262. }
复制代码
linklist.h

  1. #ifndef __LINKLIST_H__
  2. #define __LINKLIST_H__
  3. typedef struct person
  4. {
  5.         char name[32];
  6.         char sex;
  7.         int age;
  8.         int score;
  9. }DATATYPE;
  10. typedef struct node
  11. {
  12.         DATATYPE data;
  13.         struct node *next;
  14. }LinkNode;
  15. //typedef int u32;
  16. typedef struct list
  17. {
  18.         LinkNode *head;
  19.                 int clen;
  20. }LinkList;
  21. typedef int (*PFUN)(DATATYPE*,void* arg);
  22. LinkList *CreateLinkList();
  23. int InsertHeadLinkList(LinkList *list, DATATYPE *data);
  24. int ShowLinkList(LinkList *list);
  25. //LinkNode *FindLinkList(LinkList *list, char *name);
  26. LinkNode *FindLinkList(LinkList *list, PFUN fun, void * arg);
  27. int DeleteHeadLinklist(LinkList *list);
  28. int DeleteTailLinkList(LinkList *list);
  29. int DeletePosLinkList(LinkList *list, int pos);
  30. int ModifyLinkList(LinkList *list,  PFUN fun, void * arg,DATATYPE*newdata);
  31. int DestroyLinkList(LinkList *list);
  32. int InsertTailLinkList(LinkList *list, DATATYPE *data);
  33. int IfEmptyLinkList(LinkList *list);
  34. int InsertPosLinkList(LinkList *list, DATATYPE *data,int Pos);
  35. int GetSizeLinkList(LinkList *list);
  36. LinkNode* FindMidLinkList(LinkList *list);
  37. LinkNode* FindRevKLinkList(LinkList *list,int k);
  38. int RevertLinkList(LinkList *list);
  39. int InsertSortLinkList(LinkList *list) ;
  40. #endif  // /__LINKLIST_H__/ !
复制代码
双链表

doulinklist.c

  1. #include "doulinklist.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. DouLinkList *CreateDouLinkList() {
  6.   DouLinkList *dl = (DouLinkList *)malloc(sizeof(DouLinkList));
  7.   if (NULL == dl) {
  8.     printf("CreateDouLinkList malloc\n");
  9.     return NULL;
  10.   }
  11.   dl->head = NULL;
  12.   dl->clen = 0;
  13.   return dl;
  14. }
  15. int IsEmptyDouLinkList(DouLinkList *list) { return 0 == list->clen; }
  16. int GetSizeDouLinkList(DouLinkList *list) { return list->clen; }
  17. int InsertHeadDouLinkList(DouLinkList *list, DATATYPE *data) {
  18.   DouLinkNode *newnode = (DouLinkNode *)malloc(sizeof(DouLinkNode));
  19.   if (NULL == newnode) {
  20.     printf("InsertHeadDouLinkList malloc\n");
  21.     return 1;
  22.   }
  23.   memcpy(&newnode->data, data, sizeof(DATATYPE));
  24.   newnode->next = NULL;
  25.   newnode->prev = NULL;
  26.   if (IsEmptyDouLinkList(list)) {
  27.     list->head = newnode;
  28.   } else {
  29.     newnode->next = list->head;
  30.     list->head->prev = newnode;
  31.     list->head = newnode;
  32.   }
  33.   list->clen++;
  34.   return 0;
  35. }
  36. int ShowDouLinkList(DouLinkList *list, SHOW_DIR dir) {
  37.   DouLinkNode *tmp = list->head;
  38.   if (DIR_FORWARD == dir) {
  39.     while (tmp) {
  40.       printf("%s %d\n", tmp->data.name, tmp->data.score);
  41.       tmp = tmp->next;
  42.     }
  43.   } else {
  44.     while (tmp->next) {
  45.       tmp = tmp->next;
  46.     }
  47.     while (tmp) {
  48.       printf("%s %d\n", tmp->data.name, tmp->data.score);
  49.       tmp = tmp->prev;
  50.     }
  51.   }
  52.   return 0;
  53. }
  54. int InsertTailDouLinkList(DouLinkList *list, DATATYPE *data) {
  55.   if (IsEmptyDouLinkList(list)) {
  56.     return InsertHeadDouLinkList(list, data);
  57.   }
  58.   DouLinkNode *tmp = list->head;
  59.   while (tmp->next) {
  60.     tmp = tmp->next;
  61.   }
  62.   DouLinkNode *newnode = (DouLinkNode *)malloc(sizeof(DouLinkNode));
  63.   if (NULL == newnode) {
  64.     printf("InsertTailDouLinkList malloc\n");
  65.     return 1;
  66.   }
  67.   memcpy(&newnode->data, data, sizeof(DATATYPE));
  68.   newnode->next = NULL;
  69.   newnode->prev = NULL;
  70.   newnode->prev = tmp;
  71.   tmp->next = newnode;
  72.   list->clen++;
  73.   return 0;
  74. }
  75. /*
  76.     func:
  77.     param:
  78.     retval:
  79. */
  80. int InsertPosDouLinkList(DouLinkList *list, DATATYPE *data, int pos) {
  81.   int len = GetSizeDouLinkList(list);
  82.   if (pos < 0 || pos > len) {
  83.     return 1;
  84.   }
  85.   if (0 == pos) {
  86.     return InsertHeadDouLinkList(list, data);
  87.   } else if (len == pos) {
  88.     return InsertTailDouLinkList(list, data);
  89.   } else {
  90.     DouLinkNode *tmp = list->head;
  91.     for (int i = 0; i < pos; i++) {
  92.       tmp = tmp->next;
  93.     }
  94.     DouLinkNode *newnode = malloc(sizeof(DATATYPE));
  95.     if (NULL == newnode) {
  96.       printf("InsertPosDouLinkList malloc\n");
  97.       return 1;
  98.     }
  99.     memcpy(&newnode->data, data, sizeof(DATATYPE));
  100.     newnode->next = NULL;
  101.     newnode->prev = NULL;
  102.     newnode->next = tmp;
  103.     newnode->prev = tmp->prev;
  104.     tmp->prev = newnode;
  105.     newnode->prev->next = newnode;
  106.   }
  107.   list->clen++;
  108.   return 0;
  109. }
  110. int DeleteHeadDouLinkList(DouLinkList *list) {
  111.   if (IsEmptyDouLinkList(list)) {
  112.     return 1;
  113.   }
  114.   DouLinkNode *tmp = list->head;
  115.   list->head = list->head->next;
  116.   if (list->head != NULL) {
  117.     list->head->prev = NULL;
  118.   }
  119.   free(tmp);
  120.   list->clen--;
  121.   return 0;
  122. }
  123. int DeleteTailDouLinkList(DouLinkList *list) {
  124.   if (IsEmptyDouLinkList(list)) {
  125.     return 1;
  126.   }
  127.   DouLinkNode *tmp = list->head;
  128.   while (tmp->next) {
  129.     tmp = tmp->next;
  130.   }
  131.   if (tmp->prev != NULL) {
  132.     tmp->prev->next = NULL;
  133.   } else {
  134.     list->head = NULL;
  135.   }
  136.   free(tmp);
  137.   list->clen--;
  138.   return 0;
  139. }
  140. int DeletePosDouLinkList(DouLinkList *list, int pos) {
  141.   int len = GetSizeDouLinkList(list);
  142.   if (pos < 0 || pos > len - 1) {
  143.     return 1;
  144.   }
  145.   if (0 == pos) {
  146.     return DeleteHeadDouLinkList(list);
  147.   } else if (pos == len - 1) {
  148.     return DeleteTailDouLinkList(list);
  149.   } else // mid del
  150.   {
  151.     DouLinkNode *tmp = list->head;
  152.     for (int i = 0; i < pos; i++) {
  153.       tmp = tmp->next;
  154.     }
  155.     tmp->next->prev = tmp->prev;
  156.     tmp->prev->next = tmp->next;
  157.     free(tmp);
  158.     list->clen--;
  159.   }
  160.   return 0;
  161. }
  162. DouLinkNode *FindDouLinkList(DouLinkList *list, char *name)
  163. {
  164.   if(IsEmptyDouLinkList(list))
  165.   {
  166.     return NULL;
  167.   }
  168.   DouLinkNode* tmp = list->head;
  169.   while(tmp)
  170.   {
  171.     if(0 == strcmp(tmp->data.name,name))
  172.     {
  173.       return tmp;
  174.     }
  175.     tmp=tmp->next;
  176.   }
  177.   return NULL;
  178. }
  179. int ModifyDouLinkList(DouLinkList *list, char *name, DATATYPE* data)
  180. {
  181.   DouLinkNode* tmp = FindDouLinkList(list, name);
  182.   if(NULL == tmp)
  183.   {
  184.     return 1;
  185.   }
  186.   memcpy(&tmp->data,data,sizeof(DATATYPE));
  187.   return 0;
  188. }
  189. int DestroyDouLinkList(DouLinkList *list)
  190. {
  191.   int len = GetSizeDouLinkList(list);
  192.   for(int i = 0 ;i<len;i++)
  193.   {
  194.     DeleteHeadDouLinkList(list);
  195.   }
  196.   free(list);
  197.   return 0;
  198. }
复制代码
doulinklist.h

  1. #ifndef __DOULINKLIST_H__
  2. #define __DOULINKLIST_H__
  3. typedef struct person {
  4.         char name[32];
  5.         char sex;
  6.         int age;
  7.         int score;
  8. }DATATYPE;
  9. typedef struct dounode {
  10.         DATATYPE data;
  11.         struct dounode *next,*prev;
  12. }DouLinkNode;
  13. typedef struct list {
  14.         DouLinkNode *head;
  15.         int clen;
  16. }DouLinkList;
  17. typedef enum{DIR_FORWARD,DIR_BACKWARD} SHOW_DIR;
  18. DouLinkList *CreateDouLinkList();
  19. int InsertHeadDouLinkList(DouLinkList *list, DATATYPE* data);
  20. int InsertTailDouLinkList(DouLinkList *list, DATATYPE* data);
  21. int InsertPosDouLinkList(DouLinkList *list, DATATYPE* data,int pos);
  22. int ShowDouLinkList(DouLinkList *list,SHOW_DIR dir);
  23. DouLinkNode *FindDouLinkList(DouLinkList *list, char *name);
  24. int DeleteHeadDouLinkList(DouLinkList *list) ;
  25. int DeleteTailDouLinkList(DouLinkList *list);
  26. int DeletePosDouLinkList(DouLinkList *list,int pos);
  27. int ModifyDouLinkList(DouLinkList *list, char *name, DATATYPE* data);
  28. int DestroyDouLinkList(DouLinkList *list);
  29. int IsEmptyDouLinkList(DouLinkList *list);
  30. int GetSizeDouLinkList(DouLinkList *list);
  31. #endif
复制代码
链式栈

linkstack.c

  1. #include "linkstack.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. LinkStack* CreateLinkStack()
  6. {
  7.   LinkStack* ls = (LinkStack*)malloc(sizeof(LinkStack));
  8.   if(NULL == ls)
  9.   {
  10.     printf("CreateLinkStack malloc");
  11.     return NULL;
  12.   }
  13.   ls->top = NULL;
  14.   ls->clen= 0 ;
  15.   return ls;
  16.   
  17. }
  18. int PushLinkStack(LinkStack*ls,DATATYPE*data)
  19. {
  20.   LinkStackNode* newnode = (LinkStackNode*)malloc(sizeof(LinkStackNode));
  21.   if(NULL == newnode)
  22.   {
  23.     printf("PushLinkStack malloc");
  24.     return 1;
  25.   }
  26.   memcpy(&newnode->data,data,sizeof(DATATYPE));
  27.   newnode->next = NULL;
  28.   newnode->next = ls->top;
  29.   ls->top = newnode;
  30.   ls->clen++;
  31.   return 0;
  32. }
  33. int IsEmptyLinkStack(LinkStack*ls)
  34. {
  35.   return 0 == ls->clen;
  36. }
  37. int PopLinkStack(LinkStack*ls)
  38. {
  39.   if(IsEmptyLinkStack(ls))
  40.   {
  41.     return 1;
  42.   }
  43.   LinkStackNode* tmp = ls->top;
  44.   ls->top = ls->top->next;
  45.   free(tmp);
  46.   ls->clen--;
  47.   return 0;
  48. }
  49. DATATYPE*GetTopLinkStack(LinkStack*ls)
  50. {
  51.    if(IsEmptyLinkStack(ls))
  52.   {
  53.     return NULL;
  54.   }
  55.   return &ls->top->data;
  56. }
  57. int GetSizeLinkStack(LinkStack*ls)
  58. {
  59.   return ls->clen;
  60. }
复制代码
linkstack.h

  1. #ifndef __LINKSTACK_H__
  2. #define __LINKSTACK_H__
  3. typedef struct person
  4. {
  5.         char name[32];
  6.         char sex;
  7.         int age;
  8.         int score;
  9. }DATATYPE;
  10. typedef struct stacknode
  11. {
  12.         DATATYPE data;
  13.         struct stacknode *next;
  14. }LinkStackNode;
  15. typedef struct list
  16. {
  17.         LinkStackNode *top;// 和单向链表中的head,一个意思
  18.                 int clen;
  19. }LinkStack;
  20. LinkStack* CreateLinkStack();
  21. int DestroyLinkStack(LinkStack*ls);
  22. int PushLinkStack(LinkStack*ls,DATATYPE*data);
  23. int PopLinkStack(LinkStack*ls);
  24. int IsEmptyLinkStack(LinkStack*ls);
  25. DATATYPE*GetTopLinkStack(LinkStack*ls);
  26. int GetSizeLinkStack(LinkStack*ls);
  27. #endif  // /__LINKLIST_H__/ !
复制代码
队列

SeqQueue.c

  1. #include "SeqQueue.h"
  2. SeqQueue *CreateSeqQueue(int len)
  3. {
  4.     SeqQueue* sq = (SeqQueue*)malloc(sizeof(SeqQueue));
  5.     if(NULL == sq)
  6.     {
  7.         printf("CreateSeqQueue malloc\n");
  8.         return NULL;
  9.     }
  10.     sq->ptr  = (DATATYPE*)malloc(sizeof(DATATYPE)*len);
  11.     if(NULL == sq->ptr )
  12.     {
  13.         
  14.         printf("CreateSeqQueue malloc2\n");
  15.         return NULL;
  16.     }
  17.     sq->tlen = len;
  18.     sq->head  = 0 ;
  19.     sq->tail = 0;
  20.     return sq;
  21. }
  22. int IsEmptySeqQueue(SeqQueue *queue)
  23. {
  24.     return queue->head == queue->tail ;
  25. }
  26. int IsFullSeqQueue(SeqQueue *queue)
  27. {
  28.     return (queue->tail +1) % queue->tlen  == queue->head;
  29. }
  30. int QuitSeqQueue(SeqQueue *queue)
  31. {
  32.     if(IsEmptySeqQueue(queue))
  33.     {
  34.         return 1;
  35.     }
  36.     queue->head = (queue->head+1)%queue->tlen;
  37.     return 0;
  38. }
  39. int EnterSeqQueue(SeqQueue *queue, DATATYPE *data)
  40. {
  41.     if(IsFullSeqQueue(queue))
  42.     {
  43.         return 1;
  44.     }
  45.     memcpy(&queue->ptr[queue->tail],data,sizeof(DATATYPE));
  46.     queue->tail = (queue->tail +1) % queue->tlen ;
  47.     return 0;
  48. }
  49. DATATYPE* GetHeadSeqQueue(SeqQueue* que)
  50. {
  51.      if(IsEmptySeqQueue(que))
  52.     {
  53.         return NULL;
  54.     }
  55.     return &que->ptr[que->head];
  56. }
复制代码
SeqQueue.h

  1. #ifndef __SEQQUEUE_H__
  2. #define __SEQQUEUE_H__
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. typedef int DATATYPE;
  7. typedef struct queue {
  8.         DATATYPE *ptr;
  9.         int tlen;
  10.         int head;
  11.         int tail;
  12. }SeqQueue;
  13. SeqQueue *CreateSeqQueue(int len);
  14. int DestroySeqQueue(SeqQueue *queue);
  15. int QuitSeqQueue(SeqQueue *queue);
  16. int EnterSeqQueue(SeqQueue *queue, DATATYPE *data);
  17. int IsEmptySeqQueue(SeqQueue *queue);
  18. int IsFullSeqQueue(SeqQueue *queue);
  19. DATATYPE* GetHeadSeqQueue(SeqQueue* que);
  20. #endif
复制代码


tree.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char DATATYPE;
  4. typedef struct BiTNode  /* 结点结构 */
  5. {
  6.    DATATYPE data;                /* 结点数据 */
  7.    struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
  8. }BiTNode;
  9. char data[]="Ab#df###ceg##h###";
  10. int ind =  0;
  11. void CreateBiTree(BiTNode** root)
  12. {
  13.     char c = data[ind++];
  14.     if('#'==c)
  15.     {
  16.         *root = NULL;
  17.         return ;
  18.     }
  19.     *root = (BiTNode*)malloc(sizeof(BiTNode));
  20.     if(NULL == *root)
  21.     {
  22.         perror("malloc");
  23.         return ;
  24.     }
  25.     (*root)->data = c;
  26.     CreateBiTree(&((*root)->lchild));
  27.     CreateBiTree(&((*root)->rchild));
  28.     return ;
  29.    
  30. }
  31. void DestroyBiTree(BiTNode * root)
  32. {
  33.     if(NULL ==root)
  34.     {
  35.         return ;
  36.     }
  37.     DestroyBiTree(root->lchild);
  38.     DestroyBiTree(root->rchild);
  39.     free(root);
  40. }
  41. void PreOrderTraverse(BiTNode * root)
  42. {
  43.     if(NULL == root)
  44.     {
  45.         return ;
  46.     }
  47.     printf("%c",root->data);
  48.     PreOrderTraverse(root->lchild);
  49.     PreOrderTraverse(root->rchild);
  50. }
  51. void InOrderTraverse(BiTNode * root)
  52. {
  53.     if(NULL == root)
  54.     {
  55.         return ;
  56.     }
  57.     InOrderTraverse(root->lchild);
  58.     printf("%c",root->data);
  59.     InOrderTraverse(root->rchild);
  60. }
  61. void PostOrderTraverse(BiTNode * root)
  62. {
  63.     if(NULL == root)
  64.     {
  65.         return ;
  66.     }
  67.     PostOrderTraverse(root->lchild);
  68.     PostOrderTraverse(root->rchild);
  69.     printf("%c",root->data);
  70. }
  71. int        main(int argc, char **argv)
  72. {
  73.    
  74.     BiTNode* root=NULL;
  75.     CreateBiTree(&root);
  76.     PreOrderTraverse(root);
  77.     printf("\n");
  78.     InOrderTraverse(root);
  79.     printf("\n");
  80.     PostOrderTraverse(root);
  81.     printf("\n");
  82.     DestroyBiTree(root);
  83.     root = NULL;
  84.     //system("pause");
  85.     return 0;
  86. }
复制代码
哈希表

hash.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int DATATYPE;
  4. typedef struct
  5. {
  6.     DATATYPE* head;
  7.     int tlen;
  8. }HS_TABLE;
  9. HS_TABLE* CreateHsTable(int len)
  10. {
  11.     HS_TABLE* hs = malloc(sizeof(HS_TABLE));
  12.     if(NULL == hs)
  13.     {
  14.         perror("CreateHsTable malloc1");
  15.         return NULL;
  16.     }
  17.     hs->head = malloc(sizeof(DATATYPE)*len);
  18.     if(NULL == hs->head)
  19.     {
  20.         perror("CreateHsTable malloc2");
  21.         return NULL;
  22.     }
  23.     hs->tlen = len;
  24.     int i = 0 ;
  25.     for(i=0;i<len;i++)
  26.     {
  27.         hs->head[i] = -1;
  28.     }
  29.     return hs;
  30. }
  31. int HS_fun(HS_TABLE* hs,DATATYPE* data)
  32. {
  33.     return *data %hs->tlen;
  34. }
  35. int HS_insert(HS_TABLE* hs,DATATYPE* data)
  36. {
  37.     int ind = HS_fun(hs,data);
  38.     while(hs->head[ind]!= -1)
  39.     {
  40.         printf("values:%d  conllision pos:%d\n",*data,ind);
  41.         ind = (ind+1) %hs->tlen;
  42.     }
  43.     hs->head[ind] = *data;
  44.     return 0;
  45. }
  46. int HS_search(HS_TABLE* hs,DATATYPE* data)
  47. {
  48.     int ind = HS_fun(hs,data);
  49.     int oldind = ind;
  50.     while(hs->head[ind]!=*data )
  51.     {
  52.         ind = (ind+1) %hs->tlen;
  53.         if(oldind == ind)
  54.         {
  55.             return -1;
  56.         }
  57.     }
  58.     return ind;
  59. }
  60. int        main(int argc, char **argv)
  61. {
  62.    
  63.     HS_TABLE* hs = CreateHsTable(12);
  64.     int data[12]={12,67,56,16,25,37,22,29,15,47,48,34};
  65.     int i = 0;
  66.     for(i=0;i<12;i++)
  67.     {
  68.         HS_insert(hs, &data[i]);
  69.     }
  70.     int want_int = 44;
  71.     int ind = HS_search(hs, &want_int);
  72.     if(-1 == ind)
  73.     {
  74.         printf("cant find %d\n",want_int);
  75.     }
  76.     else
  77.     {
  78.         printf("find it ,pos %d\n",ind);
  79.     }
  80.    
  81.     return 0;
  82. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表