赞
踩
线性表:较为常用简单的一种数据结构,一个线性表是n个数据元素的有序序列,每个数据元素的具体含义可由自身的结构体来决定。
稍复杂的线性表,一个数据元素可以由若干个数据项组成,这种情况下通常将数据元素称为记录,含有大量记录的线性表又称为文件。
线性表的顺序表示:用地址连续的存储单元一次存储线性表的数据元素---数组。
- typedef struct List{
- int data[MAX_SIZE];//数组
- int length;//长度
- }SqList;
- //构造函数
- void Init_List(SqList *L)
- {
- L->length = 0;//元素个数
- printf("enter the 5 numbers:\n");
- for(int i= 0; i < 5 ;i++)
- {
- scanf("%d", &L->data[i]);
- L->length++;//长度增加
- }
- }
- //插入函数
- void Insert_List(SqList *L, int i, int e)
- {
- int loc = i-1;
- if (i<1 || i>L->length+1) return exit(OVERFLOW);//判断位置合法
- for (int j = L->length; j >= loc; j--)
- L->data[j+1] = L->data[j];//向后移动
- L->data[loc] = e;//赋值
- L->length++;//长度加一
- }
插入元素
这个时候就要开始判断了,既然是插入元素。那么我们需要告诉函数,所需要插入的线性表,插入元素的位置,和插入元素的值。我们还要判断插入的位置是否合理,还要判断容量空间是否够,如果不足需要增补空间。
在数组里面插入元素,需要将以后的元素后移,腾出位置再进行插入元素赋值后,表的的长度加一。
- //删除函数
- void Delete_List(SqList *L, int i)
- {
- int e;
- int loc = i-1;
- if (i<1 || i>L->length) return exit(OVERFLOW);//判断位置合法
- e = L->data[loc];//保留删除值
- for (int j = loc; j <= L->length; j++)
- L->data[j] = L->data[j+1];//向前移动
- L->length--; //长度减一
- }
在数组里面删除元素,需要将以后的元素前移,表的的长度减一。
- //根据位置返回值
- int GetElem_List(SqList *L, int i)
- {
- int e;
- if (i<1 || i>L->length) return 0;
- e = L->data[i-1];
- return e;
- }
- //返回长度
- int Length_List(SqList *L)
- {
- return L->length;
- }
- void Destroy_List(SqList *L)
- {
- L->length = 0;
- }
- #include <stdio.h>
- #include <stdlib.h>
- #define OVERFLOW -1
- #define MAX_SIZE 100
- typedef struct List{
- int data[MAX_SIZE];
- int length;
- }SqList;
- //构造函数
- void Init_List(SqList *L)
- {
- L->length = 0;//元素个数
- printf("enter the 5 numbers:\n");
- for(int i= 0; i < 5 ;i++)
- {
- scanf("%d", &L->data[i]);
- L->length++;
- }
- }
- //插入函数
- void Insert_List(SqList *L, int i, int e)
- {
- int loc = i-1;
- if (i<1 || i>L->length+1) return exit(OVERFLOW);
- for (int j = L->length; j >= loc; j--)
- L->data[j+1] = L->data[j];
- L->data[loc] = e;
- L->length++;
- }
- //删除函数
- void Delete_List(SqList *L, int i)
- {
- int e;
- int loc = i-1;
- if (i<1 || i>L->length) return exit(OVERFLOW);
- e = L->data[loc];
- for (int j = loc; j <= L->length; j++)
- L->data[j] = L->data[j+1];
- L->length--;
- }
- //返回长度
- int Length_List(SqList *L)
- {
- return L->length;
- }
- //展示函数
- void Show_List(SqList *L)
- {
- for (int i=0; i < L->length; i++)
- printf("%d ", L->data[i]);
- }
- //返回值
- int GetElem_List(SqList *L, int i)
- {
- int e;
- if (i<1 || i>L->length) return 0;
- e = L->data[i-1];
- return e;
- }
- void Destroy_List(SqList *L)
- {
- L->length = 0;
- }
- void menu()
- {
- printf("----------------------------------------------------------------------\n");
- printf("Choice a number:\n");
-
- printf("1.Init_List 2.Insert_List \n");
- printf("3.Delete_List 4.Length_List \n");
- printf("5.GetElem_List 6.List_List \n");
- printf("6.Destroy_List 7.Show_List \n");
- printf("----------------------------------------------------------------------\n");
- }
- //主函数
- int main()
- {
- menu();
- int i, e;
- int n,n1,n2,n3,n4;
- SqList L;
- while (1)
- {
- printf("Choice a number:\n");
- scanf("%d", &n);
- switch(n)
- {
-
- case 1:
- Init_List(&L); break;
- case 2:
- printf("enter the location and the elem:");
- scanf("%d%d", &i, &e);
- Insert_List(&L, i, e);
- Show_List(&L);break;
- case 3:
- printf("enter the the location:");
- scanf("%d", &i);
- Delete_List(&L, i);
- Show_List(&L);break;
- case 4:
- printf("%d",Length_List(&L)); break;
- case 5:
- printf("enter the the location:");
- scanf("%d", &i);
- printf("%d",GetElem_List(&L,i)); break;
- case 6:
- Destroy_List(&L);
- Show_List(&L); break;
- case 7:
- Show_List(&L); break;
- default:printf("please enter the numbers in certain:\n"); break;
- }
- }
-
-
- return 0;
- }
希望对你们有帮助
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。