📄 1.c
字号:
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
typedef int ElemType;
typedef struct seqlist {
ElemType *data_address;
int listsize,listlength;
}seqlist;
//初始化线性表
void initlist(seqlist *L,int n)
{
L->data_address=(ElemType *)malloc(n*sizeof(ElemType));
if(L->data_address==NULL)
exit(1);
L->listsize=n; /*表大小为n */
L->listlength=0; /*空表长度为0(元素个数)*/
}
//插入元素
void Insertelem(seqlist *L,int pos,ElemType item) /*在pos位置插入元素item*/
{
int i;
if(L->listlength==L->listsize)
{
printf("表元素已满!");
exit(1);
}
if(pos<1|| pos>L->listlength+1)
{ printf("目标位置不合法!");
exit(1);
}
for(i=L->listlength-1;i>=(pos-1);--i)
{ L->data_address[i+1]=L->data_address[i]; }
L->data_address[pos-1]=item;
L->listlength++;
}
void Insertrear(seqlist *L,ElemType item)
{
if(L->listlength==L->listsize)
{
printf("表已满!");
exit(1);
}
L->data_address[L->listlength]=item;
L->listlength++;
}
//删除pos位置元素
void Deletelem(seqlist *L,int pos)
{
int i;
if(L->listlength==0)
{ printf("表为空!");
exit(1);
}
if(pos<1||pos>L->listlength)
{printf("目标位置不合法!");
exit(1);
}
for(i=L->data_address[pos-1];i<=L->listlength-1;++i)
{
L->data_address[i-1]=L->data_address[i];
}
L->listlength--;
}
//查找pos位置的元素
ElemType Getelem(seqlist *L,int pos)
{
if(pos<1 || pos > L->listlength)
{ printf("pos位置不合法!");
exit(1);
}
return (L->data_address[pos-1]);
}
//合并线性表
void MergeList(seqlist La,seqlist Lb,seqlist *Lc)
{
ElemType *pa,*pb,*pc,*pa_last,*pb_last;
pa=La.data_address;
pb=Lb.data_address;
Lc->listsize=Lc->listlength=La.listlength+Lb.listlength;
pc=Lc->data_address=(ElemType*)malloc(Lc->listsize*sizeof(ElemType));
if(!Lc->data_address) exit(1);
pa_last=La.data_address+La.listlength-1;
pb_last=Lb.data_address+Lb.listlength-1;
while(pa<=pa_last&&pb<=pb_last)
{
if(*pa<=*pb) *pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last) *pc++ = *pa++;
while(pb<=pb_last) *pc++ = *pb++;
}
//求表长
int Listlength(seqlist *L)
{
return(L->listlength);
}
//清空表元素
void Clearlist(seqlist *L)
{
L->listlength=0; /*表元素个数置空*/
}
//释放空间
void Freelist(seqlist *L)
{
free(L->data_address);
}
//输出线性表
void Printlist(seqlist *L)
{
int n,i;
n=Listlength(L);
for(i=0;i<n;++i)
{
printf("%6d",L->data_address[i]);
}
printf("\n");
}
void main()
{
int i,m,n,d,a;
int pos;
seqlist L,La,Lb,Lc;
initlist(&L,100);
printf("表中需要几个元素:\n");
scanf("%d",&n);
printf("请依次输入元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&d);
Insertrear(&L,d);
}
printf("表中元素为:\n");
Printlist(&L);
printf("\n");
do { //从菜单中选择遍历方式,输入序号。
printf("\t*******************请选择********************\n");
printf("\t☆ ☆\n");
printf("\t☆ 1: 插入元素 ☆\n");
printf("\t☆ ☆\n");
printf("\t☆ 2: 删除元素 ☆\n");
printf("\t☆ ☆\n");
printf("\t☆ 3: 查找元素 ☆\n");
printf("\t☆ ☆\n");
printf("\t☆ 4: 合并 ☆\n");
printf("\t☆ ☆\n");
printf("\t☆ 0: 退出 ☆\n");
printf("\t☆ ☆\n");
printf("\t*********************************************\n");
printf("您的选择:");
scanf("%d",&i); //输入菜单序号(0-4)
printf("您选择的操作是:");
switch (i){
case 0:
printf("退出!\n");
printf("谢谢使用,再见!O(∩_∩)O");
break;
case 1:
printf("线性表的插入\n");
printf("请输入你想插入的元素:\n");
scanf("%d",&m);
printf("您想将元素插在第几个的位置:\n");
scanf("%d",&pos);
Insertelem(&L,pos,m);
printf("插入后线性表中元素为:\n");
Printlist(&L);
printf("\n");
break;
case 2:
printf("线性表的删除\n");
printf("请输入要删除元素的位置:\n");
scanf("%d",&pos);
Deletelem(&L,pos);
printf("删除后线性表中元素为:\n");
Printlist(&L);
printf("\n");
break;
case 3:
printf("线性表的查找\n");
printf("您想查找元素的位置是:\n");
scanf("%d",&a);
Getelem(&L,a);
printf("您查找的元素是:");
printf("%d\n",L.data_address[a-1]);
break;
case 4:
initlist(&La,100);
initlist(&Lb,100);
printf("线性表的合并\n");
printf("请输入线性表La,表中需要几个元素:\n");
scanf("%d",&n);
printf("请依次输入元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&d);
Insertrear(&La,d);
}
printf("线性表La是:\n");
Printlist(&La);
printf("请输入线性表Lb,表中需要几个元素:\n");
scanf("%d",&n);
printf("请依次输入元素:\n");
for(i=0;i<n;i++)
{
scanf("%d",&d);
Insertrear(&Lb,d);
}
printf("线性表Lb是:\n");
Printlist(&Lb);
printf("合并后的线性表Lc是:\n");
MergeList(La,Lb,&Lc);
Printlist(&Lc);
break;
default: exit(1);
}
} while(i!=0);
system("pause");
Clearlist(&L);
Freelist(&L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -