顺序表的相关操作。实现了顺序表的建立,判断顺序表是否为空,顺序表的插入,顺序表的删除(下标),顺序表的查找,删除表中一元素,打印顺序表的功能。
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#define FALSE 0
#define TRUE 1
typedef int DataType;
// 顺序表数据类型
struct SeqList
{
int MAXNUM; // 顺序表最大的容量
int n; // 顺序表中已有的元素个数
DataType *element; // 真正存放元素的其实地址
};
typedef struct SeqList *PSeqList;
// 顺序表建立的算法,m为申请的结点个数
PSeqList createNullList_seq(int m)
{
PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));
if(palist != NULL)
{
palist->element = (DataType *)malloc(sizeof(DataType)*m);
if(palist->element)
{
palist->MAXNUM = m;
palist->n = 0;
return(palist);
}
else
{
free(palist);
}
}
printf("out of space!\n");
return NULL;
}
// 顺序表判空
int isNullList_seq(PSeqList palist)
{
return(palist->n == 0);
}
// 顺序表插入,在下标为p的元素之前插入元素
// 1.移动结点 2.插入结点 3.增加表长
// 先看表空间是否已满,检查插入位置的有效性0<=p<n,注意数据的移动方向
int InsertPre_seq(PSeqList palist, int p, DataType x)
{
int q;
if (palist->n >= palist->MAXNUM)
{
printf("overflow");
return FALSE;
}
if (p<0 || p>palist->n)
{
printf("not exist\n");
return FALSE;
}
for(q=palist->n-1; q>=p; q--)
palist->element[q+1] = palist->element[q];
palist->element[p] = x;
palist->n = palist->n+1;
return TRUE;
}
// 顺序表删除,删除下标为p的元素
// 检查删除位置有效性 0<=p<n, 注意数据移动方向
int deleteP_seq(PSeqList palist, int p)
{
int q;
if(p<0 || p>palist->n)
{
printf("Not exist!\n");
return FALSE;
}
for(q=p; q<palist->n-1; q++)
{
palist->element[q] = palist->element[q+1];
}
palist->n = palist->n-1;
return TRUE;
}
// 顺序表的查找。存在返回下标,不存在返回FALSE
int locate_seq(PSeqList palist, int x)
{
int q;
for (q=0; q<palist->n; q++)
{
if (palist->element[q] == x)
{
return q;
}
}
return FALSE;
}
// 删除表中一元素
int deleteV_seq(PSeqList palist, DataType x)
{
int p, q;
for(p=0; p<palist->n; p++)
{
q = locate_seq(palist, x);
if (q)
{
deleteP_seq(palist, q);
}
}
return TRUE;
}
// 打印顺序表
void print(PSeqList palist)
{
int i;
for(i=0; i<palist->n; i++)
printf("%d\t", palist->element[i]);
printf("\n");
}
int main()
{
PSeqList lx_alist;
int max,len,i,x,q;
int temp;
int j,k;
printf("\n please input the max value(<100)of max=");
scanf("%d",&max);
lx_alist = createNullList_seq(max);
printf("判断顺序表是否为空(1 is null): %d\n",isNullList_seq(lx_alist));
for(i=0; i<10; i++)
{
lx_alist->element[i] = i+1;
lx_alist->n++;
}
printf("对数组赋初值:\n");
print(lx_alist);
printf("\n修改其中一个元素的值:\n");
lx_alist->element[5] = 9;
print(lx_alist);
printf("\n删除刚改的元素的值:\n");
temp = 9;
deleteV_seq(lx_alist, temp);
print(lx_alist);
printf("现在所含元素个数为:%d\n", lx_alist->n);
temp = 5;
printf("\n在第%d个元素前插入一个数:\n", temp);
InsertPre_seq(lx_alist, temp, 11);
print(lx_alist);
system("pause");
return 0;
}
初学数据结构,有的代码写的不是很简洁。轻喷。