顺序表、链表

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

=======顺序表======

#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;
}

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值