线性表是一对一的
分为两种1 顺序存储 (增加删除插入的操作都比较麻烦)2 链式存储
链式存储:1 单链表 2 双链表
单双链表又分别分为 循环&不循环, 有头&无头
栈和队列是有指向和特定的操作线性表
栈:先进后出 FILO
队列:FIFO先进先出
树是一对多的
树要常用递归思想,递归一般设计上限,为了保证栈不破裂
图是多对多的
#include"sqlist.h"
#include<stdio.h>
#include<stdlib.h>
sqlist *sqlist_creat()
{
sqlist *me;
me = malloc(sizeof(*me));
if (me == NULL)
return NULL;
me->last = -1;
return me;
}
void sqlist_display(sqlist* me)
{
if ( me->last ==-1)
return ;
int i ;
for (i = 0; i<=me->last ; i++)
printf("%d\t",me->data[i]);
putchar('\n');
return ;
}
void sqlist_creat1(sqlist **ptr)
{
*ptr = malloc(sizeof(**ptr));
if(*ptr == NULL)
return ;
(*ptr)->last = -1;
return ;
}
int sqlist_insert(sqlist * me,int i, datatype *data)
{
if(me->last == DATASIZE - 1)
return -1;
if(i<0 || i> me->last + 1)
return -2;
int j = me->last;
for ( j;i<=j;j--)
me->data[j+1] = me->data[j];
me->data[i] = *data;
me->last ++;
return 0;
}
int sqlist_delete(sqlist *me, int i)
{
if(i<0||i>me->last)
return -1;
int j ;
for (j = i+1; j <= me->last; j++)
me->data[j-1] = me->data[j];
me->last --;
return 0;
}
int sqlist_find(sqlist *me, datatype *data)
{
int i;
if(-1 == me->last)
{
printf("list is empty!\n");
return -1;
}
for (i = 0; i < me->last;i++)
if(*data == me->data[i])
return i;
return -2;
}
int sqlist_isempty(sqlist *me)
{
return (-1 == me->last )?0:1;
}
int sqlist_setempty(sqlist *me)
{
me->last = -1;
return 0;
}
int sqlist_getnum(sqlist *s)
{
return s->last +1;
}
int sqlist_destroy(sqlist *me)
{
free(me);
}
int sqlist_union(sqlist *list1, sqlist *list2)
{
int i=0;
for(i=0;i<= list2->last;i++)
if(sqlist_find(list1,&list2->data[i])<0)
sqlist_insert(list1,0,&list2->data[i]);
}