线性表基本操作
/*00基本信息定义*/
#include "stdio.h"
#include "malloc.h"
#define SUCCESS 1
#define FAILURE 0
#define null 0
#define maxsize 100
typedef int datatype;
typedef struct /*定义线性表(顺序结构)数据类型*/
{
datatype data[maxsize];
int last;
}sequenlist;
int n;
/*定义功能选择菜单函数*/
void print()
{ printf("----线性表(顺序结构)的基本操作----\n");
printf("----------开始----------\n");
}
/*打印线性表(顺序结构)*/
void printout(sequenlist *L)
{
int i;
for(i=1; i<=L->last; i++)
printf(" [%d]", i);
printf("\n");
for(i=1; i<=L->last; i++)
printf("%6d", L->data[i]);
printf("\n");
}
/*01线性表(顺序结构)的初始化*/
int InitList(sequenlist *L)
{
L = (sequenlist *)malloc(sizeof(sequenlist));
if(!L)
{
return FAILURE;
}
else
{
L->last = -1;
return SUCCESS;
}
}
/*02创建线性表(顺序结构)*/
void creatlist(sequenlist *L)
{
int i;
int tmp;
printf("请输入线性表中数据的个数:");
scanf("%d",&n);
for(i=1; i<=n; i++)
{
printf("data[%d]=", i);
fflush(stdin); /*清除掉键盘缓冲区*/
scanf ("%d", &tmp);
L->data[i] = tmp;
}
L->last=n;
}
/*03在第i个结点前插入元素x(note:元素从1始计数)*/
int insert(sequenlist *L, datatype x,int i)
{
int j;
if (L->last==maxsize)/*如果原线性表(顺序结构)已经满了*/
{
printf("线性表(顺序结构)已满\n");
return 0;
}
else if ((i<1)||(i>L->last+1)) /*如果输入的i值超出范围*/
{
printf("错了,请输入正确的'i'值\n");
return 0;
}
else
{
for(j=L->last; j>=i; j--) /*从第i个元素起,每个元素后移一位*/
L->data[j+1]=L->data[j];
L->data[i]=x;
L->last=L->last+1;
}
return(1);
}
/*04删除第i个结点,note:元素从0始计数*/
int dellist(sequenlist *L,int i)
{
if ((i<1)||(i>L->last)) /*如果输入的i值超出范围*/
{
printf ("错了,请输入正确的'i'值\n");
return 0;
}
else
{
for(;ilast; i++) /*从第i+1个元素起,每个元素前移一位*/
L->data[i]=L->data[i+1];
L->last=L->last-1;
return(1);
}
}
/*05求线性表(顺序结构)的长度*/
int CountList(sequenlist *L)
{
return L->last;
}
/*06清空线性表(顺序结构)*/
void ClearList(sequenlist *L)
{
L->last = -1;
}
/*07判断线性表(顺序结构)是否为空*/
bool ListIsEmpty(sequenlist *L)
{
return L->last == -1;
}
/*08按位置取线性表(顺序结构)中元素*/
datatype GetElem(sequenlist *L,int pos)
{
if ((L->last == -1) || (pos < 1) || (pos > L->last))
/*表为空或者位置不对*/
{
printf("线性表为空,或者输入的位置有错!");
return FAILURE;
}
return L->data[pos];
}
/*09按值查找的定位函数*/
int LocateList(sequenlist *L, datatype value)
{
int i = 0;
if(L->last == -1) /*表为空*/
{
printf("线性表为空");
return -1;
}
/*查找元素*/
for (i = 1; i <= L->last; i++)
{
if (value == L->data[i])
{
break;
}
}
/*没有找到元素*/
if (i > L->last)
{
return -1;
}
return i;
}
/*10附加操作函数*/
void AppendList(sequenlist *L, datatype item)
{
if(L->last == maxsize) /*表已满*/
{
printf("线性表已满,不能附加新数据!\n");
}
else
{
L->data[++L->last] = item;
}
}
//主驱动函数
main()
{
sequenlist *L;
int cmd;
int x,i;
print();
L=(sequenlist *)malloc(sizeof(sequenlist)); /*指针在使用前一定要初始化*/
do
{
printf("\n--------------------------\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");
printf("9......按值查找\n");
printf("10.....附加操作\n");
printf("11.....退出\n");
printf("----------请选择----------\n");
do
{
fflush(stdin); /*清除掉键盘缓冲区*/
scanf("%d",&cmd);
}
while((cmd!=1)&&(cmd!=2)&&(cmd!=3)&&(cmd!=4)&&(cmd!=5)&&(cmd!=6)
&&(cmd!=7)&&(cmd!=8)&&(cmd!=9)&&(cmd!=10)&&(cmd!=11));
switch (cmd)
{
case 1:
if(InitList(L)==1)
{
printf("线性表(顺序结构)初始化成功!\n");
printout(L);
break;
}
else
{
printf("线性表(顺序结构)初始化失败!\n");
break;
}
case 2:
printf("请根据提示创建线性表(顺序结构)!\n");
creatlist(L);
printf("结果如下\n");
printout(L);
break;
case 3:
printf("请输入你要插入的数据:");
fflush(stdin); /*清除掉键盘缓冲区*/
scanf("%d",&x);
printf("请输入你要插入的位置:");
scanf("%d",&i);
insert(L, x, i);
printout(L);
n++;
break;
case 4:
printf("请输入你要删除元素的位置:");
fflush(stdin); /*清除掉键盘缓冲区*/
scanf("%d",&i);
dellist(L, i);
printout(L); n--;
break;
case 5:
printf("线性表(顺序结构)长度为:");
printf("%d\n",CountList(L));
break;
case 6:
printf("清空线性表(顺序结构)!");
ClearList(L);
printout(L);
break;
case 7:
if(ListIsEmpty(L))
printf("线性表(顺序结构)已经被清空!\n");
else
printf("线性表(顺序结构)不为空!\n");
printout(L);
break;
case 8:
printf("请输入元素的位置序号:");
fflush(stdin);
scanf("%d",&i);
printf("该位置的元素为:%d",GetElem(L,i));
break;
case 9:
printf("请输入元素值:");
fflush(stdin);
scanf("%d",&x);
printf("该元素的位置序号为:%d",LocateList(L,x));
break;
case 10:
printf("请输入要附加的元素值:");
scanf("%d",&x);
AppendList(L,x);
printf("附加后:\n");
printout(L);
break;
}
}while (cmd!=11);
}
本文档为【线性表操作-示例程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。