1、线性表
线性结构: 一对一
假设有n个数据元素,满足线性结构;
特点: 1. n=0, 该表为空
2. a0为表头, 没有直接前驱, a(n-1)为表尾, 没有直接后继
3. 其他有且仅有一个直接前驱和一个直接后继
顺序存储结构存放线性表:顺序表
链式存储结构存放线性表:链表
顺序表的实现:{
一维数组 != 顺序表
数组任意位置任意使用,顺序表必须从头使用,不能有空
}
示例代码
#include"seqlist.h"
seqlist * createSeqList()
{
seqlist * L = (seqlist *)malloc(sizeof(seqlist));
if(NULL == L)
{
printf("malloc fail\n");
return NULL;
}
L->last = -1;
return L;
}
int isFullSeqList(seqlist *L)
{
return ((L->last == MAXSIZE-1)?1:0);
}
int isemptySeqList(seqlist *L)
{
return ((L->last == -1)?1:0);
}
int insertSeqList(seqlist *L, int pos, data_t x)
{
if(isFullSeqList(L) || (pos < 0) || (pos > L->last+1))
{
printf("插入失败:表为满或位置不合法\n");
return -1;
}
int i=0;
for(i = L->last; i >= pos; i--)
{
L->data[i+1] = L->data[i];
}
L->data[pos] = x;
L->last++;
return 0;
}
int deleteSeqList(seqlist *L, int pos, data_t *x)
{
if(isemptySeqList(L) || (pos < 0) || (pos > L->last))
{
printf("删除失败:表为空或位置不合法\n");
return -1;
}
*x = L->data[pos];
int i = 0;
for(i = pos; i < L->last; i++)
{
L->data[i] = L->data[i+1];
}
L->last--;
return 0;
}
void showSeqlist(seqlist *L)
{
int i=0;
for(i = 0; i <= L->last; i++)
{
printf("%d ", L->data[i]);
}
puts("");
}
#include"seqlist.h"
int main(void)
{
seqlist * L = createSeqList();
if(NULL == L)
{
printf("创建顺序表失败\n");
}
insertSeqList(L, 0, 4);
insertSeqList(L, 0, 3);
insertSeqList(L, 0, 2);
insertSeqList(L, 0, 1);
showSeqlist(L);
data_t x;
deleteSeqList(L, 0, &x);
showSeqlist(L);
return 0;
}
#ifndef __SEQLIST_H
#define __SEQLIST_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 10
typedef int data_t;
typedef struct list{
data_t data[MAXSIZE];
int last;
}seqlist;
int isFullSeqList(seqlist *L);
int isemptySeqList(seqlist *L);
seqlist * createSeqList();
int insertSeqList(seqlist * L, int pos, data_t x);
int deleteSeqList(seqlist * L, int pos, data_t *x);
void showSeqlist(seqlist * L);
#endif