数据结构 线性表的顺序存储

来源:互联网 发布:mac邮件设置qq邮箱 编辑:程序博客网 时间:2024/04/30 20:50
#include<stdio.h>#include<stdlib.h>#include<time.h>#define MAX 1000typedef 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;}

0 0