笔记
作业
创建顺序表、判空、判满、头插、尾插、头删、尾删、清空顺序表、释放顺序表。
seq_list.h文件
#ifndef __SEQ_LIST_H__
#define __SEQ_LIST_H__
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 5
typedef int ElemType;
typedef struct seq_list {
ElemType data[MAXSIZE];
int len;
}SeqList,*SeqList_p;
//创建顺序表
SeqList_p seq_creat();
//判空
int isEmpty(SeqList_p SL);
//判满
int isFull(SeqList_p SL);
//顺序表头插
void head_insert(SeqList_p SL,ElemType e);
//顺序表尾插
void tail_insert(SeqList_p SL,ElemType e);
//打印顺序表
void print_SL(SeqList_p SL);
//顺序表头删
ElemType head_delete(SeqList_p SL);
//顺序表尾删
ElemType tail_delete(SeqList_p SL);
//清空顺序表
void clear_SL(SeqList_p SL);
//按位置插入,i为要插入的位置,i是位序,不是下标
int ListInsert(SeqList_p SL,int i,ElemType e);
//释放顺序表
SeqList_p free_SL(SeqList_p SL);
#endif
seq_list.c文件
#include "seq_list01.h"
//创建顺序表
SeqList_p seq_creat()
{
SeqList_p SL=(SeqList_p)malloc(sizeof(SeqList));
if(NULL==SL)
{
printf("空间申请失败\n");
return NULL;
}
SL->len=0;
bzero(SL->data,sizeof(SL->data));
return SL;
}
//判空
int isEmpty(SeqList_p SL)
{
if(NULL==SL)
{
printf("没有该顺序表\n");
return -1;
}
return SL->len==0?1:0;
}
//判满
int isFull(SeqList_p SL)
{
if(NULL==SL)
{
printf("没有该顺序表\n");
return -1;
}
return SL->len==MAXSIZE?1:0;
}
//顺序表头插
void head_insert(SeqList_p SL,ElemType e)
{
//判断顺序表是否存在
if(NULL==SL)
{
printf("没有该顺序表\n");
return;
}
//判满
if(isFull(SL))
{
printf("顺序表满,不能插入\n");
return;
}
int i;
for(i=SL->len-1;i>=0;i--)
{
SL->data[i+1]=SL->data[i];
}
SL->data[0]=e;
SL->len++;
}
//尾插
void tail_insert(SeqList_p SL,ElemType e)
{
if(NULL==SL)
{
printf("没有该顺序表\n");
}
if(isFull(SL))
{
printf("表已满,不能插入\n");
}
int i=SL->len;
SL->data[i]=e;
SL->len++;
return;
}
//打印顺序表
void print_SL(SeqList_p SL)
{
int i;
for(i=0;i<SL->len;i++)
{
printf("%3d",SL->data[i]);
}
putchar(10);
}
//头删
ElemType head_delete(SeqList_p SL)
{
if(isEmpty(SL))
{
printf("顺序表为空,不能删除\n");
return -1;
}
ElemType e=SL->data[0];//存储被删除的元素的值
int i;
for(i=1;i<SL->len;i++)
{
SL->data[i-1]=SL->data[i];
}
SL->len--;
return e;//返回被删除的元素值
}
//尾删
ElemType tail_delete(SeqList_p SL)
{
if(isEmpty(SL))
{
printf("顺序表为空,不能删除\n");
return -1;
}
ElemType e=SL->data[SL->len-1];//存储被删除的元素的值
SL->len--;
}
//清空顺序表
void clear_SL(SeqList_p SL)
{
SL->len=0;
}
//按位置插入,i为要插入的位置i,i是位序,不是数组下标
int ListInsert(SeqList_p SL,int i,ElemType e)
{
if(i<1 || i>SL->len+1)
{
printf("插入位置不合法\n");
return -1;
}
if(SL->len>=MAXSIZE)
{
printf("顺序表已满,不能插入\n");
return -1;
}
int j;
for(j=SL->len-1;j>=i;j--)
{
SL->data[j]=SL->data[j-1];
}
SL->data[i-1]=e;
SL->len++;
return 1;
}
//释放顺序表
SeqList_p free_SL(SeqList_p SL)
{
free(SL);
SL=NULL;
return SL;
}
main.c文件
#include "seq_list01.h"
int main()
{
SeqList_p SL=seq_creat();
head_insert(SL,5);
head_insert(SL,4);
head_insert(SL,3);
head_insert(SL,2);
head_insert(SL,1);
print_SL(SL);
head_delete(SL);
print_SL(SL);
//printf("isEmpty=%d\n",isEmpty(SL));
//clear_SL(SL);
//print_SL(SL);
//printf("isEmpty=%d\n",isEmpty(SL));
ListInsert(SL,5,4);
print_SL(SL);
tail_delete(SL);
print_SL(SL);
SL=free_SL(SL);
head_insert(SL,5);
return 0;
}