C语⾔数据结构:顺序表(附源码)1.运⾏界⾯
2.编程过程中的思考
1.不按课本中的思想(从表头开始插⼊),⽽是从表中或表尾开始插⼊数据元素,结果如何,运⾏如下:
请输⼊您想进⾏的操作序号:
1.新建⼀个空表
2.在指定位置插⼊⼀个数据元素
3.删除指定位置的数据元素
4.修改指定位置元素
5.输出表内全部元素
6.查询某位置的数据
7.查询某数据的位置
8.退出
1
建⽴新表成功!
请输⼊您想进⾏的操作序号:
1.新建⼀个空表
2.在指定位置插⼊⼀个数据元素
3.删除指定位置的数据元素
4.修改指定位置元素
5.输出表内全部元素
6.查询某位置的数据
7.查询某数据的位置
8.退出
2
请输⼊插⼊位置:3
请输⼊插⼊数据:12
插⼊数据元素成功!
请输⼊您想进⾏的操作序号:
1.新建⼀个空表
2.在指定位置插⼊⼀个数据元素
3.删除指定位置的数据元素
4.修改指定位置元素
5.输出表内全部元素
6.查询某位置的数据
7.查询某数据的位置
8.退出
5
位置为1,数据为-842150451
请输⼊您想进⾏的操作序号:
1.新建⼀个空表
2.在指定位置插⼊⼀个数据元素
3.删除指定位置的数据元素
4.修改指定位置元素
5.输出表内全部元素
6.查询某位置的数据
7.查询某数据的位置
8.退出
思考结果:结构体中数据项length每次插⼊⾃增1,若不按序插⼊,length最后⼀位对应的数据元素为空,输出-842150451解决⽅法:将插⼊位置的序号赋给length,空的位置补0,即可不按序插⼊,但此操作与顺序表建⽴⽬的相悖。
2.SqList *p=(SqList *)malloc(sizeof(SqList))
该语句为主函数中实参p申请⼀个⼤⼩为SqList的内存,并将⾸地址赋值给p。
3.源代码
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define InitMaxSize 5  //初始表容量
typedef int ElemType;
typedef struct
{
ElemType *elem;
int size;//分配的空间⼤⼩
int length;
}SqList;
//初始化,建空表
int InitList(SqList *L)
{
L->elem=(ElemType*)malloc(sizeof(ElemType)*InitMaxSize);
if(!L->elem)
return0;
L->length=0;
L->size=InitMaxSize;
return1;
}
//指定位置插⼊数据
void ListInsert(SqList *L,int i,ElemType e)
{
int n,j;
if(L->length>=L->size)
{
printf("顺序表已满,请输⼊想要增加的长度:\n");
scanf("%d",&n);
L->elem=(ElemType*)realloc(L->elem,(L->size+n)*sizeof(ElemType));              L->size+=n;
}
else
if(i<1||i>L->size)
{
printf("%d不在顺序表范围内\n\n",i);
}
else
{
L->length++;
for(j=L->length-1;j>=i;j--)
{
L->elem[j]=L->elem[j-1];
}
L->elem[i-1]=e;
printf("插⼊数据元素成功!\n\n");
}
}
//删除指定位置元素
void DeleteElem(SqList *L,int i)
{
int j;
if(i<1||i>L->length)
{
printf("%d不在顺序表范围内\n",i);
}
else
{
for(j=i;j<=L->length;j++)
{
L->elem[j-1]=L->elem[j];
L->length--;
}
}
}
//修改指定位置数据
void Revise(SqList *L,int i,ElemType e)
{
if(i>L->length&&i<1)
{
printf("%d不在顺序表范围内\n",i);
}
else
L->elem[i-1]=e;
printf("修改成功!\n");
}
//输出全部元素
void PrintList(SqList *L)
{
int i,z;
for(i=1;i<=L->length;i++)
{
printf("位置为%d,数据为%d\n",i,L->elem[i-1]);              z=1;
}
if(!z)
{
printf("顺序表中⽆数据元素!\n");
z=0;
}
printf("\n");
}
//查询某位置的数据
c语言listinsert函数
void SearchData(SqList *L,int i)
{
if(i>L->length||i<1)
{
printf("%d不在顺序表范围内\n\n",i);
}
else
printf("%d位置的数据为%d\n\n",i,L->elem[i-1]); }
//查询某数据的位置
void SearchLoc(SqList *L,ElemType e)
{
int i,j=0;
for(i=1;i<=L->length;i++)
{
if(L->elem[i-1]==e)
{
printf("%d的位置为%d\n\n",e,i);
j=1;
}
}
if(!j)
{
printf("%d不在顺序表内\n\n",e);
}
}
void main()
{
int i,j=1,c,k;
ElemType e;
SqList *p=(SqList *)malloc(sizeof(SqList));
while(j)
{
printf("请输⼊您想进⾏的操作序号:\n");
printf("1.新建⼀个空表\n");
printf("2.在指定位置插⼊⼀个数据元素\n");
printf("3.删除指定位置的数据元素\n");
printf("4.修改指定位置元素\n");
printf("5.输出表内全部元素\n");
printf("6.查询某位置的数据\n");
printf("7.查询某数据的位置\n");
printf("8.退出\n");
scanf("%d",&c);
switch(c)
{
case1:
{
k=(InitList(p));
if(k)
{
printf("建⽴新表成功!\n\n");
}
else printf("建⽴新表失败!\n\n");
break;
}
case2:
{
printf("请输⼊插⼊位置:");
scanf("%d",&i);
printf("请输⼊插⼊数据:");
scanf("%d",&e);
ListInsert(p,i,e);
break;
}
case3:
{
printf("请输⼊要删除元素的位置:\n");
scanf("%d",&i);
DeleteElem(p,i);
printf("删除成功!\n\n");
break;
}
case4:
{
printf("请输⼊您想修改元素的位置:");
scanf("%d",&i);
printf("请输⼊您希望改成的数值:");
scanf("%d",&e);
Revise(p,i,e);
break;
}
case5:
{
PrintList(p);
break;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。