📄 list.c
字号:
//*************************************************************
//顺序表的C实现(数据结构+算法)
//
//CreateDate:09/28
//编译工具VC++6.0
//file name is Tline.c
//*************************************************************
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
typedef int ElemType;
typedef struct seqlist
{
ElemType *data_address;
int listsize,listlength;
}seqlist;
ElemType Getelem(seqlist *L,int pos);
void initlist(seqlist *L,int n);
void Freelist(seqlist *L);
int Emptylist(seqlist *L);
int Fulllist(seqlist *L);
void Insertelem(seqlist *L,int pos,ElemType item);
void Insertrear(seqlist *L,ElemType item);
void Deletelem(seqlist *L,int pos,ElemType item);
void Updataelem(seqlist *L,int pos,ElemType item);
void Clearlist(seqlist *L);
int Locate(seqlist *L,ElemType item);
int Listlength(seqlist *L);
//create all function
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 Freelist(seqlist *L)
{ free(L->data_address); }
int Emptylist(seqlist *L)
{
if(L->listlength==0)
return 1;
else
return 0;
}
int Fulllist(seqlist *L)
{
if(L->listlength==L->listsize)
return 1;
else
return 0;
}
//在pos位置插入元素item
void Insertelem(seqlist *L,int pos,ElemType item)
{
int i;
if(Emptylist(L))
{
printf("表元素已满!");
exit(1);
}
if(pos<1 || pos>L->listlength+1)
{ printf("目标位置不合法!");
exit(1);
}
for(i=L->listlength-1;i>pos;--i)
{ L->data_address[i+1] = L->data_address[i];}
L->data_address[pos] = 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++;
}
void Deletelem(seqlist *L,int pos)
{
int i;
if(Fulllist(L))
{ printf("表为空!");
exit(1);
}
if(pos<0 || pos<L->listlength-1)
{ printf("目标位置不合法!");
exit(1);
}
for(i=L->data_address[pos-1];i<L->listlength-1;++i)
{
L->data_address[i] = L->data_address[i+1];
}
L->listlength--;
}
//获取pos位置的元素的值
ElemType Getelem(seqlist *L,int pos)
{
if(pos<0 || pos > L->listlength-1)
{ printf("pos位置不合法!");
exit(1);
}
return (L->data_address[pos]);
}
//替换pos位置元素的值
void Updataelem(seqlist *L,int pos,ElemType item)
{
if(pos<0 || pos>L->listlength-1)
{ printf("pos位置不合法!");
exit(1);
}
L->data_address[pos] = item;
}
//清空表元素
void Clearlist(seqlist *L)
{ L->listlength = 0; }
//返回item元素在表中的下标
int Locate(seqlist *L,ElemType item)
{
int i=0;
while(i <= L->listlength-1 && item != L->data_address[i])
i++;
if(i<=L->listlength-1)
return(i);
return(-1); //表中无此元素
}
//求表长,返回表中元素个数
int Listlength(seqlist *L)
{ return(L->listlength); }
void Printlist(seqlist *L)
{
int n,i;
n = Listlength(L);
for(i=0;i<n;++i)
{
printf("%6d",Getelem(L,i));
if((i+1)%10==0)
printf("\n");
}
printf("\n");
}
//主程序体
void main(void)
{
int i;
seqlist L;
initlist(&L,51);
srand((unsigned int)time(0));
for(i=0;i<50;++i)
Insertrear(&L,rand()%50);//插入50个元素
printf("表中元素为:\n");
Printlist(&L);
//Deletelem(&L,49);
Printlist(&L);
i=Locate(&L,22);
if(i!=-1)
printf("%d\n",i);
else
printf("22 dose not exist!");
printf("%d\n",Getelem(&L,10));
system("pause");
Freelist(&L);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -