C语言实现一般线性表的顺序存储
来源:互联网 发布:微信视频制作软件 编辑:程序博客网 时间:2024/06/05 04:50
C语言实现一般线性表的顺序存储,以下是在VS2013编译通过的,欢迎讨论。有关数据结构的概念可看我的另一篇文章http://blog.csdn.net/linuxlsl/article/details/45649655
一、头文件ArrList.h
#ifndef _ARRLIST_H#define _ARRLIST_Htypedef struct{int x;int y;}Point;typedef struct{Point *pt;//节点int length;//链表当前长度int size;//链表总容量}ArrList;Point *CreateArrList(int nLength); //创建长为 nLength 的线性表void DestroyArrList(ArrList *list); //销毁线性表 void ClearArrList(ArrList *list); //置空线性表 int IsEmptyArrList(ArrList *list); //检测线性表是否为空int GetArrListLength(ArrList *list); //获取线性表长度int GetArrListSize(ArrList *list); //获取线性表总容量Point* GetArrListElement(ArrList *list, int pos); //获取线性表中第pos个元素int InsertToArrList(ArrList *list, int pos,Point* pt);//插入一个元素 pt 到线性表 nPos 处Point* DeleteFromArrList(ArrList *list, int pos);//从线性表上删除一个元素#endif
二、实现文件ArrList.c
#include <stdio.h>#include <stdlib.h>#include <string.h>#include "ArrList.h"//创建长为 nLength 的线性表Point* CreateArrList(int nLength){ArrList *ret = NULL;if (nLength < 0)return NULL;ret = (Point*)malloc(sizeof(ArrList)+sizeof(Point)*nLength);if (ret == NULL)return NULL;ret->pt = (Point*)(ret + 1);//ret向后跳sizeof(ArrList)ret->length = 0;ret->size = nLength;return ret;}//销毁线性表 void DestroyArrList(ArrList *list){if (list == NULL)return;free(list);return;}//置空线性表void ClearArrList(ArrList *list){if (list == NULL)return;list->length = 0;}//检测线性表是否为空int IsEmptyArrList(ArrList *list){return list->length == 0 ? 1 : 0;}//获取线性表长度int GetArrListLength(ArrList *list){if (list == NULL)return -1;return list->length;}//获取线性表总容量int GetArrListSize(ArrList *list){if (list == NULL)return -1;return list->size;}//获取线性表中第pos个元素Point* GetArrListElement(ArrList *list, int pos){Point* ret = NULL;if (list == NULL || pos<0 || pos >= list->length){return NULL;}ret = &list->pt[pos];//pt = &list->pt[pos];//pt->x = list->pt[pos].x;//pt->y = list->pt[pos].y;return ret;}//插入一个元素 pt 到线性表 nPos 处int InsertToArrList(ArrList *list, int pos, Point *pt){int i = 0;if (list == NULL || pt == NULL){return -1;}//查看是不是满了if (list->length >= list->size){return -2;}//位置错误判断if (pos<0 || pos >= list->size){return -3;}//优化if (pos >= list->length){pos = list->length;}//插入算法//从pos位置处开始,把数组后面的元素依此后移for (i = list->length; i>pos; i--){//把前的元素往后移list->pt[i] = list->pt[i - 1];}//循环跳出以后,pos正好是,要出入的位置list->pt[pos] = *pt;list->length++;return 0;}//从线性表上删除一个元素Point* DeleteFromArrList(ArrList *list, int pos){int i = 0;Point* ret = NULL;if (list == NULL || pos<0 || pos >= list->length){return -1;}ret = &(list->pt[pos]);//删除算法for (i = pos; i<list->length; i++){list->pt[i] = list->pt[i+1];}list->length--;return ret;}
三、测试文件ArrListTest.c
#include<stdio.h>#include "stdlib.h"#include "string.h"#include "ArrList.h"int main(){int i = 0;ArrList *list = NULL;Point P1, P2, P3;P1.x = 0;P1.y = 0;P2.x = 2;P2.y = 4;P3.x = 3;P3.y = 3;list = CreateArrList(10);printf("len:%d\n", GetArrListLength(list));printf("size:%d\n", GetArrListSize(list));InsertToArrList(list, 0, &P1);InsertToArrList(list, 0, &P2);InsertToArrList(list, 0, &P3);printf("len:%d\n", GetArrListLength(list));//循环遍历for (i = 0; i < GetArrListLength(list); i++){Point* ret = GetArrListElement(list, i);if (ret != NULL){printf("P(%d,%d)\n",ret->x ,ret->y);}}for (i = 0; i < GetArrListLength(list); i++){DeleteFromArrList(list, 0);printf("len:%d\n", GetArrListLength(list));}DestroyArrList(list);system("pause");return 0;}
四、运行结果:
0 0
- C语言实现一般线性表的顺序存储
- C语言实现一般线性表的链式存储
- 线性表的顺序存储结构的c语言实现
- C语言--线性表的顺序存储的实现
- 顺序存储结构线性表的C语言实现
- 用C语言实现线性表的顺序存储结构
- 线性表顺序存储结构的c语言实现
- 线性表的顺序存储结构(C语言实现)
- 线性表的顺序静态存储--C语言实现
- 线性表的顺序存储实现c语言
- 线性表的顺序实现(C语言)
- 线性表的顺序实现(c语言)
- C语言实现线性表之顺序存储结构操作
- 线性表顺序存储-使用c语言实现
- 线性表(顺序存储)C语言实现
- 线性表-顺序存储结构(C语言实现)
- c语言的线性表的顺序存储的实现,数组
- 线性表的顺序存储结构的常见操作(C语言代码实现)
- Lateral View语法
- 微信企业红包开发(php)
- 史上最全的开源库整理
- 新浪微博API自动登录流程
- iOS-UITableCell详情
- C语言实现一般线性表的顺序存储
- 系统出错, 发生系统错误 1067, 进程意外终止. 解决方法
- cocos2d-Lua(quick-cocos)开发环境搭建
- .sql文件转为.txt文件(亲测)
- C语言函数_string.h 之 内存填充函数memset
- android导入项目以后出现The project description file (.project) for is missing的错误?
- android中获取XML中的布局
- iOS开发笔记8--基于XMPP协议的手机多方多端即时通讯方案
- 从键盘读入实数