数据结构源码笔记(C语言):线性表的顺序表示

/* 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语言描述)汇总:

数据结构源码笔记(C语言):英文单词按字典序排序的基数排序

数据结构源码笔记(C语言):直接插入排序

数据结构源码笔记(C语言):直接选择排序

数据结构源码笔记(C语言):置换-选择算法

数据结构源码笔记(C语言):Huffman树字符编码

数据结构源码笔记(C语言):Josephus问题之顺序表

数据结构源码笔记(C语言):Josephus问题之循环链接表

数据结构源码笔记(C语言):多项式合并

数据结构源码笔记(C语言):二叉树之叶子结点旋转销毁

数据结构源码笔记(C语言):哈夫曼树

数据结构源码笔记(C语言):集合的位向量表示

数据结构源码笔记(C语言):链接队列

数据结构源码笔记(C语言):链接栈

数据结构源码笔记(C语言):线性表的单链表示

数据结构源码笔记(C语言):线性表的顺序表示

数据结构源码笔记(C语言):栈的基本操作

数据结构源码笔记(C语言):中缀表达式

数据结构源码笔记(C语言):希尔插入排序

数据结构源码笔记(C语言):索引文件建立和查找

数据结构源码笔记(C语言):冒泡排序

数据结构源码笔记(C语言):快速排序

数据结构源码笔记(C语言):可变长度字符串的快速排序

数据结构源码笔记(C语言):基数排序

数据结构源码笔记(C语言):二路归并排序

数据结构源码笔记(C语言):堆排序

数据结构源码笔记(C语言):二叉树搜索树Kruskal

数据结构源码笔记(C语言):二叉搜索树Prim

数据结构源码笔记(C语言):最短路径弗洛伊德算法

数据结构源码笔记(C语言):深度、广度优先生成树

数据结构源码笔记(C语言):邻接矩阵转化邻接表

数据结构源码笔记(C语言):统计字符串中出现的字符及其次数

数据结构源码笔记(C语言):顺序查找

数据结构源码笔记(C语言):哈希表的相关运算算法

数据结构源码笔记(C语言):分块法查找

数据结构源码笔记(C语言):二分查找

数据结构源码笔记(C语言):二叉树遍历

数据结构源码笔记(C语言):二叉平衡树的相关操作算法

数据结构源码笔记(C语言):二叉排序树的基本操作算法

数据结构源码笔记(C语言):B树的相关运算算法

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半个冯博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值