顺序表、链表

来源:互联网 发布:大智慧mac版好用吗 编辑:程序博客网 时间:2024/05/16 11:02

先写下顺序表和链表的代码。

=======顺序表======#include <stdio.h>#include <stdlib.h>typedef struct _seqlist_ { int * const data; int clen; int tlen;}seqlist_t;seqlist_t *list_init(int len);int list_destroy(seqlist_t *list);int list_insert(seqlist_t *list, int value);int list_show(seqlist_t *list);int list_delete(seqlist_t *list, int obj);int list_modify(seqlist_t *list, int old, int new);int list_search(seqlist_t *list, int obj);int list_getlen(seqlist_t *list);int main(){ seqlist_t *list; int value = 100; list = list_init(10); puts("insert:"); while (0 == list_insert(list, value))  value += 100; list_show(list);#if 0 list_delete(list, 1500); list_show(list); puts("modify:"); list_modify(list, 1400, 3000); list_show(list); puts("search:"); if (list_search(list, 1400))  puts("yes"); else  puts("no");#endif printf("Clen: %d\n", list_getlen(list)); list_destroy(list); return 0;}seqlist_t *list_init(int len){ seqlist_t *list = NULL; list = malloc(sizeof(seqlist_t)); *(int **)&list->data = malloc(sizeof(int) * len);////////list->data = malloc(sizeof(int )* len); list->tlen = len; list->clen = 0; return list;}int list_destroy(seqlist_t *list){ free(list->data); free(list); return 0;}int list_insert(seqlist_t *list, int value){ if (list->clen >= list->tlen)  return -1; list->data[list->clen ++] = value; return 0;}int list_show(seqlist_t *list){ int i; printf("Clen: %d\tTlen: %d\n", list->clen, list->tlen); for (i = 0; i < list->clen; i++)  printf("%5d", list->data[i]); putchar('\n'); return 0;}int list_delete(seqlist_t *list, int obj){ int i; for (i = 0; i < list->clen; i++) {  if (obj == list->data[i])   break; } if (i == list->clen)  return -1; for (; i + 1 < list->clen; i++)  list->data[i] = list->data[i+1]; list->clen--; return 0;}int list_modify(seqlist_t *list, int old, int new){ int i; for (i = 0; i < list->clen; i++) {  if (old == list->data[i])   break; } if (i >= list->clen)      return -1;     list->data[i] = new;     return 0;}int list_search(seqlist_t *list, int obj){ int i; for (i = 0; i < list->clen; i ++) {  if (obj == list->data[i])   return 1; } return 0;}int list_getlen(seqlist_t *list){ return list->clen;}==========链表=========#include <stdio.h>#include <stdlib.h>typedef struct _linknode_ { int data; struct _linknode_ *next;}linknode_t;typedef struct _linklist_ { linknode_t *head; int clen; int tlen;}linklist_t;linknode_t *create_linknode(int value);linklist_t *list_init(int len);int list_insert(linklist_t *list, int value);int main(){ linklist_t *list = NULL; int value = 100; list = list_init(10); while (0 == list_insert(list, value))  value += 100; list_show(list);#if 0 list_delete(); list_modify(); list_search(); list_getlen(); list_destroy();#endif return 0;}linklist_t *list_init(int len){ linklist_t *list = NULL; list = malloc(sizeof(linklist_t)); list->head = NULL; list->clen = 0; list->tlen = len; return list;}int list_insert(linklist_t *list, int value){ linknode_t *new = NULL; if (list->clen >= list->tlen)  return -1; new = create_linknode(value); new->next = list->head; list->head = new; list->clen++; return 0;}linknode_t *create_linknode(int value){ linknode_t *node = NULL; node = malloc(sizeof(linknode_t)); node->next = NULL; node->data = value; return node;}int list_show(linklist_t *list){ linknode_t *p = list->head->next; while (NULL != p) {  printf("%5d", p->data);  p = p->next; } putchar('\n'); return 0;}int list_destroy(linklist_t *list){ linknode_t *p = list->head; linknode_t *tmp = NULL; while (NULL != p) {  tmp = p;  p = p->next;  free(tmp); } free(list); return 0;}int list_delete(linklist_t *list, int obj){ linknode_t *p = list->head; linknode_t *tmp = NULL; while (NULL != p->next && p->next->data != obj)  p = p->next; if (NULL == p->next)  return -1; tmp = p->next; p->next = tmp->next; free(tmp); list->clen--; return 0;}linknode_t *list_search(linklist_t *list, int obj){ linknode_t *p = list->head->next; while (NULL != p && p->data != obj)  p = p->next; return p;}int list_modify(linklist_t *list, int old, int new){ linknode_t *p = list->head->next; while (NULL != p && p->data != old)  p = p->next; if (NULL == p)  return -1; p->data = new; return 0;}int list_getlen(linklist_t *list){ return list->clen;}int list_reverse(linklist_t *list){ linknode_t *p = list->head->next; linknode_t *tmp = NULL; list->head->next = NULL; while (NULL != p) {  tmp = p;  p = p->next;  tmp->next = list->head->next;  list->head->next = tmp; } return 0;}

这里写图片描述

这里写图片描述

0 0
原创粉丝点击