用C语言建立 线性表## *指针法*

球球同学正在学习数据结构,用指针建立顺序表的代码分享给大家!
包括总代码,运行结果,和具体分析!如果有错误,欢迎大家指正!

总代码:
#include <stdio.h>
#include <stdlib.h> //malloc函数必须要在stdlib.h头文件下
typedef int ElemType; //ElemType定义为int型;
#define List_size 50
typedef struct //重点
{
ElemType elem; //储存空间基地址
int length; //当前的长度
int listsize; //每次分配到的长度,我的是 50
}Sqlist; //
/
run this program using the console pauser or add your own getch, system(“pause”) or input loop */
void init(Sqlist *p,int k) //初始化
{
int i;
p->elem=(ElemType *)malloc(sizeof(ElemType)*List_size);
if(k)
printf(“Data;”);
for(i=0;i<k;i++)
scanf("%d",&p->elem[i]);
p->length=k;
p->listsize=List_size;
return;
}
void hebing(Sqlist *p,Sqlist *q) //合并两个表,
{
int i,j,k,x;
for(i=0;ilength;i++)
{
x=q->elem[i];
if(seat(p,x)0)
{
p->elem[p->length++]=x;
}
}
printf(“输入合并后的序列\n”);
}
int seat(Sqlist p,ElemType x) //进行寻找,表中是否含有这个元素
{
int flag=0,i;
for(i=0;i<p.length;i++)
{
if(x
p.elem[i])
{
flag=1;
break;
}
}
return flag;
}
void showlist(Sqlist p) //展示函数
{
int i;
for(i=0;i<p.length;i++)
printf("%d “,p.elem[i]);
printf(”\n");
}
void quicksort(Sqlist *p,int left,int right)//快速排序
{
int i,j,k,temp;
if(left>right)
{
return;
}
i=left;
j=right;
temp=p->elem[i];
while(i!=j)
{
while(p->elem[j]>=temp&&i<j)
j–;
while(p->elem[i]<=temp&&i<j)
i++;
if(i<j)
{
k=p->elem[i];
p->elem[i]=p->elem[j];
p->elem[j]=k;
}
}
p->elem[left]=p->elem[i];
p->elem[i]=temp;
quicksort(p,left,i-1);
quicksort(p,i+1,right);
return;
}
void insert(Sqlist *p)//插入一个元素
{
int i=0,j;
ElemType e;
printf(“请输入插入的数:”);
scanf("%d",&e);
while(seat(*p,e)==1)
{
printf(“重复,请重新输入:”);
scanf("%d",&e);
}
while(p->elem[i]<e)
i++;
p->length++;
for(j=p->length-1;j>i;j–)
p->elem[j]=p->elem[j-1];
p->elem[i]=e;
printf(“加入后的序列:\n”);
quicksort(p,0,p->length-1);
}
void dele(Sqlist *p)//删除一个元素
{
int i=0,j;
ElemType e;
printf(“请输入删除的数:”);
scanf("%d",&e);
while(!seat(*p,e))
{
printf(“没有这个数!!\n请重新输入:”);
scanf("%d",&e);
}
while(p->elem[i]!=e)
i++;
j=i;
for(j=i;jlength-2;j++)
p->elem[j]=p->elem[j+1];
p->length–;
printf(“删除后的序列是:\n”);
}
int main(int argc, char *argv[]) {

Sqlist L1,L2,L3;
init(&L1,4);
init(&L2,4);
hebing(&L1,&L2);
showlist(L1);
quicksort(&L1,0,L1.length-1);
printf(“整理后的序列为:\n”);
showlist(L1);
insert(&L1);
showlist(L1);
dele(&L1);
showlist(L1);
return 0;
}

运行结果:
在这里插入图片描述
主函数:
在这里插入图片描述
建立线性表:
在这里插入图片描述
接下来是初始化线性表: 注意k是我想要插入的长度,可以改变
在这里插入图片描述
接下来是合并两个线性表: ( 用的是指针,因为指针代表地址 )把L2合并入L1;
seat()函数的作用是判断表L1中是否含有那个当前的元素
在这里插入图片描述这是展示函数showlist():
在这里插入图片描述

接下来对合并后的表进行排序: 这里我使用的是快速排序(不知道的小伙伴要加油La!)
在这里插入图片描述接下来是插入函数:先找到属于e的位置,然后把后面的元素全部向后移动
在这里插入图片描述
最后是删除函数dele():先找到那个元素,然后把后面的元素窦向前移动一个单位
在这里插入图片描述
这就是球球同学的代码啦,学习之路永无终点,一起努力;

猜你喜欢

转载自blog.csdn.net/weixin_43260335/article/details/82823857