/* SeqList.c*/
/*线性表的顺序表示:函数实现*/
#include <stdio.h>
#include <stdlib.h>
//#include "SeqList.h"
//#define MAXNUM 100
typedef int DataType;
typedef struct SeqList
{
int MAXNUM;
int n;
int *element;
} PSeqList;
PSeqList *createNullList_seq(DataType m)
{
/* 创建新的顺序表 */
PSeqList *palist = (PSeqList *)malloc(sizeof(struct SeqList));
if (palist!=NULL)
{
palist->element = (int*)malloc(sizeof(DataType)*m);
if (palist->element){
palist->MAXNUM=m;
palist ->n = 0; /* 空表长度为0 */
return (palist);
}
else free(palist);
}
printf("Out of space!!\n"); /* 存储分配失败 */
return NULL;
}
int isNullList_seq( PSeqList *palist )
{
/*判别palist所指顺序表是否为空表。*/
return ( palist->n == 0 );
}
int locate_seq( PSeqList *palist,DataType x)
{
/*求x在palist所指顺序表中的下标 */
int q;
for ( q=0; q<palist->n; q++) if(palist->element[q] == x) return (q);
return (-1);
}
int insertPre_seq(PSeqList *palist,DataType p,DataType x)
/* 在palist所指顺序表中下标为p的元素之前插入元素x */
{
int q;
if ( palist->n >= palist-> MAXNUM )
{ /* 溢出 */
printf("Overflow!\n");
return ( 0 );
}
if (isNullList_seq(palist))
{ /*空顺序表插入 */
palist->element[0] = x; /* 插入元素x */
palist->n = 1; /* 元素个数为1 */
return ( 1 );
}
if (p<0 || p>palist->n )
{ /* 不存在下标为p的元素 */
printf("Not exist! \n"); return (0 );
}
for(q=palist->n - 1; q>=p; q--) /* 插入位置及之后的元素均后移一个位置 */
palist->element[q+1] = palist->element[q];
palist->element[p] = x; /* 插入元素x */
palist->n = palist->n + 1; /* 元素个数加1 */
return ( 1 );
}
int insertPost_seq(PSeqList *palist, DataType p, DataType x)
/* 在palist所指顺序表中下标为p的元素之前插入元素x */
{
int q;
if ( palist->n >= palist-> MAXNUM )
{ /* 溢出 */
printf("Overflow!\n");
return ( 0 );
}
if ( isNullList_seq(palist) )
{ /*空顺序表插入 */
palist->element[0] = x; /* 插入元素x */
palist->n = 1; /* 元素个数为1 */
return ( 1 );
}
if (p<0 || p>palist->n )
{ /* 不存在下标为p的元素 */
printf("Not exist! \n"); return (0 );
}
for(q=palist->n - 1; q>p; q--) /* 插入位置及之后的元素均后移一个位置 */
palist->element[q+1] = palist->element[q];
palist->element[p] = x; /* 插入元素x */
palist->n = palist->n + 1; /* 元素个数加1 */
return ( 1 );
}
int deleteP_seq( PSeqList *palist, int p )
/* 在palist所指顺序表中删除下标为p的元素 */
{
int q;
if ( p<0 || p>palist->n - 1 ) /* 不存在下标为p的元素 */
{
printf("Not exist!\n ");
return (0);
}
for(q=p; q<palist->n-1; q++) /* 被删除元素之后的元素均前移一个位置 */
palist->element[q] = palist->element[q+1];
palist->n = palist->n - 1; /* 元素个数减1 */
return ( 1 );
}
int deleteV_seq(PSeqList *palist,DataType q)
{
if(locate_seq(palist,q)!=-1);
if(deleteP_seq(palist,q)) return 1;
else return 0;
return 0;
}
int main()
{
int i=0;
PSeqList *palist;
palist=createNullList_seq(60);
insertPre_seq(palist,0,40);
printf("%d",locate_seq( palist,40));
if(!(isNullList_seq(palist)))
{
for(i=0;i<40;i++)
insertPre_seq(palist,0,39-i);
}
for(i=41;i<56;i++)
insertPost_seq(palist, i, i);
deleteP_seq(palist, 54 );
deleteV_seq(palist,53);
for(i=0;i<palist->n;i++)
printf("%d\n",(palist->element[i]));
printf("%d\n",locate_seq( palist,14));
printf("%d\n",palist->n);
return 0;
}
数据结构源码笔记(C语言描述)汇总: