#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 1000
typedef struct
{
int num;
char name[6];
}Mem;
typedef struct
{
Mem mem[MAX];
int len;
}Seqlist ;
Seqlist L;
void Print()
{
printf("\n");
system("color 0A");
printf("**请按提示操作**\n");
printf("1-> 初始化链表\n");
printf("2-> 计算链表长度\n");
printf("3-> 插入节点\n");
printf("4-> 取节点\n");
printf("5-> 删除节点\n");
printf("6-> 待加入功能\n");
printf("9-> 查看链表信息\n");
printf("0-> 退出\n");
printf("\n");
}
void Look(Seqlist *L)
{
int i,j;
if(L->len==0) printf("当前链表为空!\n");
for(i=0;i<L->len;i++)
{
printf("%5d ",L->mem[i].num);
for( j=0;j<6;j++)
printf("%c",L->mem[i].name[j]);
printf("\n");
}
}
void Initial(Seqlist *K)
{
K->len=0;
printf("初始化成功!\n");
}
void ListLen(Seqlist *L)
{
printf("该链表的长度为%d\n",L->len);
}
void Insert0(Seqlist *L)
{
int i,j,n,t;srand(time(NULL));
printf("请输入插入的节点个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个成员的代号:\n",i+1);
t=rand()%9999;
L->mem[L->len].num=10000+t;
printf("第%d个成员代号已自动生成:",i+1);
printf("%5d \n",L->mem[i].num);
printf("请输入第%d个成员的名称:\n",i+1);
for(j=0;j<6;j++)
{
t=rand()%26+65;
L->mem[L->len].name[j]=t;
}
printf("第%d个成员名称已自动生成:",i+1);
for( j=0;j<6;j++)
printf("%c",L->mem[i].name[j]);
printf("\n");
L->len++;
}
printf("插入完毕,请继续操作\n");
}
void Insert1(Seqlist *L,int i)
{
int n,j,k,x,t;
printf("请输入要插入的个数:");
scanf("%d",&n);
for(k=L->len-1,j=L->len+n-1;k>=i;k--,j--)
{
L->mem[j]=L->mem[j-n];
}
L->len+=n;
Look(L);
for(k=0,j=i;k<n;j++,k++)
{
printf("请输入第%d个成员的代号:\n",k+1);
t=rand()%9999;
L->mem[j].num=10000+t;
printf("第%d个成员代号已自动生成:",k+1);
printf("%5d \n",L->mem[j].num);
printf("请输入第%d个成员的名称:\n",k+1);
for(x=0;x<6;x++)
{
t=rand()%26+65;
L->mem[j].name[x]=t;
}
printf("第%d个成员名称已自动生成:",k+1);
for(x=0;x<6;x++)
printf("%c",L->mem[j].name[x]);
printf("\n");
}
}
void InsertPick(Seqlist *L,int t)
{
int i;
if(L->len==0){printf("当前链表为空,请先输入节点!\n");Insert0(L);}
else
{
if(!t)
{
printf("\n当前一共有%d个节点:\n",L->len);
Look(L);
printf("请输入要插的节点号(0表示插入最后):");
t=1;
}
scanf("%d",&i);
if(i==0) {Insert0(L);}
else
{
if(i>L->len){printf("超出节点范围,请重新输入:");InsertPick(L,t);}
else
{
Insert1(L,i);
}
}
}
}
void GetDot(Seqlist L,int t)
{
int i;
if(!t) printf("当前共有%d个节点\n请输入要取的节点:\n",L.len);
scanf("%d",&i);
if(i>L.len)
{
printf("超出链表节点个数,请重新输入:");
t=1;
GetDot(L,t);
}
else
{
printf("该节点为:\n");
printf("%d ",L.mem[i-1].num);
for(t=1;t<7;t++)
printf("%c",L.mem[i-1].name[t-1]);
printf("\n");
}
}
void Delete(Seqlist *L,int t)
{
int i;
char c;
if(!t) printf("当前共有%d个节点\n请输入要删除的节点:\n",L->len);
scanf("%d",&i);
if(i>L->len)
{
printf("超出链表节点个数,请重新输入:");
t=1;
Delete(L,t);
}
else
{
printf("该节点为:\n");
printf("%d ",L->mem[i-1].num);
for(t=1;t<7;t++)
printf("%c",L->mem[i-1].name[t-1]);
printf("\n");
printf("确认删除吗?Y/N :");
scanf(" %c",&c);
if('Y'==c||'y'==c)
{
for(t=i-1;t<L->len-1;t++)
L->mem[t]=L->mem[t+1];
L->len--;
printf("删除成功,当前链表为:\n");
Look(L);
}
else
printf("取消删除,请重新操作!\n");
}
}
int main()
{
int t;
printf("线性表的顺序存储\n");
while(1)
{
Print();
scanf("%d",&t);
switch(t)
{
case 1:Initial(&L);break;
case 2:ListLen(&L);break;
case 3:InsertPick(&L,0);break;
case 4:GetDot(L,0);break;
case 5:Delete(&L,0);break;
case 6:printf("功能待开发~\n");break;
case 9:Look(&L);break;
case 0: return 0;
default:printf("输入错误,请重新输入:\n");break;
}
}
printf("\n");
printf("\n");
printf("\n");
return 0;
}
数据结构 线性表的顺序存储
最新推荐文章于 2024-09-05 14:36:31 发布