赞
踩
第一话 数据结构之线性表
出门乘作地铁或公交,从起点到终点,相当于一个线性表,其中整个线路上的每一个站点构成了线性表上的每一个数据元素。线性表也是最自由的,其表上任意位置的数据元素都可以操作。
线性表是最简单、最常用的线性结构,有两端,一个是首端,另一个是尾端,除了首尾,数据元素“一个接一个地排列”,并且元素的类型是相同的。
线性表中相邻数据元素之间存在之序偶关系<ai,ai+1>。
线性表由有限个数据元素组成,表长就是表中数据元素的个数。
线性表由相同类型构成,每一个ai必须属于同一数据类型。
- #include <stdio.h>
- #include <stdlib.h>
- #define maxsize 10
- typedef int Elemtype;//定义一个整型的数据类型
- typedef struct{
- Elemtype date[maxsize];//一、存放数据为数组类型
- int Len;//二\定义长度
- }List;
- //结构的名称为List
- List *init_list()
- {
- List *L;//创造一个表
- L = (List*)malloc(sizeof(List));//为表申请一块空间
- L->Len = 0;//表最开始的长度为0
- return L;
- }
- void createlist(List *L)
- {
- Elemtype x;//要输入的数
- int i=0;
- printf("请输入线性表的数据,输入-1代表结束:\n");
- scanf("%d",&x);
- while(x!=-1){
- L->date[i] = x;//将输入的数据放入表中
- i++;
- L->Len++;//将表的长度增加一格
- scanf("%d",&x);
- }
- }
- void outlist(List *L)
- {
- int i;
- for(i=0;i<L->Len;i++){
- printf("%5d",L->date[i]);//将表中的数据输出来
- }
- printf("\n");
- }
- int main(void)
- {
- List *L;
- L = init_list();
- createlist(L);
- outlist(L);
- return 0;
- }
- void Insert(List *L,int i,Elemtype x)
- {
- int j;
- for(j=L->Len;j>=i-1;j--){
- L->date[j] = L->date[j-1];//将数据从前往后挪一位
- }
- L->date[i-1] = x;//将数据插入第i个位置
- L->Len++;//插入之后长度得加1
- }
- int main(void)
- {
- List *L;
- L = init_list();
- createlist(L);
- outlist(L);
- Insert(L,2,10);//在第二个位置插入数据10
- outlist(L);
- return 0;
- }
- void Delete(List *L,int i)
- {
- int j;
- for(j=i;j<L->Len;j++){
- L->date[j-1] = L->date[j];//让线性表数据都往前挪一位
- }
- L->Len--;
- }
- int main(void)
- {
- List *L;
- L = init_list();
- createlist(L);
- outlist(L);
- Delete(L,3);//将线性表第三个元素删除
- outlist(L);
- return 0;
- }
顺序存储表可以随机存取表中的任一元素,其存储位置可以用一个简单的、直观的公式表示。
另一方面,这个特点也造成了这种存储结构的缺点:在表中插入和删除操作时,需要移动大量元素。由于顺序要求占用连续的存储空间,存储分配只能预先静态分配,当表中数据元素个数较多且变化较大时,操作过程相对复杂,必然导致存储空间的浪费。
对于以上问题,是否有另一种存储结构可以解决呢?
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。