l543664486
l543664486
2020-03-24 18:31

线性表结构的实现,内心迷乱,希望能得到帮助

  • c语言

#include
#include

#define ERROR 0
#define OK 1

typedef int Status;
typedef int Elemtype;
typedef struct node
{ Elemtype elem[LIST_SIZE];
int length;
}Sqlist;

typedef int Elemtype;
typedef int Status;
typedef struct LNode{
Elemtype data;

struct LNode *next;
}LNode,*Linklist;
Status LengthList(Linklist *L);

Status create(Sqlist L,int n);
Status Findlen1(Sqlist *L);
Elemtype GetElem(Sqlist *L, int n);
int LocateElem(Sqlist *L, int n);
Status ListInsert_Sq(Sqlist *L,int i,int x);
Status LisDele_Sq(Sqlist *L,int i);
int Printlist(Sqlist
L);
Status Init_linklist(Linklist *L);
void Creat_Linklist(Linklist *L,int n);
Status LengthList(Linklist *L);
Status Get_Linklist(Linklist *L,int i,Elemtype *e);
Status Locate_Linklist(Linklist *L,Elemtype e);
Status Insert_Linklist(Linklist *L,int i,Elemtype e);
Status Delete_Linklist(Linklist *L,int i,Elemtype *e) ;
void Display(Linklist *L) ;
void menu1();
void menu2();

int main() {
int x;
while(1) {
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t1:顺序表\n");
printf("\t\t\t\t\t2:链表\n");
printf("\t\t\t\t\t3:退出\n");
printf("\n\t\t\t\t\t请输入您的选择(1-3)=:");
scanf("%d",&x);
switch(x)
{
case 1:menu1(); break;
case 2:menu2(); break;
case 3:return 0;break;
default:printf("error");return 1; break;
}
printf("\n");
system("pause");
}
return 0;
}

Status create(Sqlist *L, int n)
{ int i;
if(n>LIST_SIZE) return ERROR;
for(i=0;i { printf("请输入第%d个数据的值:", i+1);
scanf("%d", &L->elem[i]);
}
L->length=n;
return OK;
}

Status Findlen1(Sqlist *L)
{return (L->length);}

Elemtype GetElem(Sqlist *L, int n)

{

{ if (nL->length)
{
return ERROR;
}
return L->elem[n - 1];
}
}

int LocateElem(Sqlist *L, int n) //4
{int i;
for(i=0;i<=L->length;i++)
if(L->elem[i]==n) return i+1;
else return 0;
}

Status ListInsert_Sq(Sqlist *L,int i,int x) //5
{int j;
if (iL->length +1) return ERROR;
if(L->length>100) return ERROR;
for(j=L->length-1;j>=i-1;j--)
L->elem[j+1]=L->elem[j];
L->elem[i-1]=x;
++(L->length);
return OK;
}

Status LisDele_Sq(Sqlist *L,int i) //6
{int j;
if ((iL->length)) return ERROR;
for(j=i;j<=L->length-1;j++)
L->elem[j-1]=L->elem[j];
--L->length;
return OK;
}

int Printlist(Sqlist* L) //7
{
int j;
for (j = 0; j <= L->length - 1; j++)
{
printf("第%d个数据为%d\n", j + 1, L->elem[j]);
}
return OK;
}

Status Init_linklist(Linklist *L)
{
*L=(Linklist)malloc(sizeof(LNode));
if(!(*L))

{
return ERROR;
}
(*L)->next=NULL;

return OK;
}

void Creat_Linklist(Linklist *L,int n)
{
Linklist p,q;
int i;
p = *L;
for(i=0;i {
printf("请输入链表第%d个元素:",i);
q=(Linklist)malloc(sizeof(LNode));
scanf("%d",&q->data);
p->next=q;

p=q;

}
p->next=NULL;

}

Status LengthList(Linklist *L)
{
int i=0;
Linklist p,q;
p = *L;
if(p->next==NULL) return ERROR;
while(p->next!=NULL)
{
i++;
p=p->next;
}
return i;
}
Status Get_Linklist(Linklist *L,int i,Elemtype *e)
{
int j=1;
Linklist p,q;
p = *L;
if(inext||i>LengthList(L))
{
return ERROR;
}
while(j<=i&&p)
{
p=p->next;
j++;
}
if(j-1==i)
{
*e=p->data;
return OK;
}
else return ERROR;
}

Status Locate_Linklist(Linklist *L,Elemtype e)
{
int i=1;
Linklist p,q;
p = (*L)->next;
while(p->data!=e&&p)
{
p=p->next;
i++;
}
if(p->data!=e) return -1;
else return i;
}

Status Insert_Linklist(Linklist *L,int i,Elemtype e)
{
int j=1;
Linklist p,q;
p = *L;
if(inext||i>LengthList(L))

{
return ERROR;
}
while(p&&j {
p=p->next;
j++;
}
q=(Linklist)malloc(sizeof(LNode));
q->data=e;
q->next=p->next;
p->next=q;
return OK;

}

Status Delete_Linklist(Linklist *L,int i,Elemtype *e)
{
int j=1;
Linklist p,q;
p = *L;
if(inext||i>LengthList(L))
{
return ERROR;
}
while(jnext)
{
p=p->next;
j++;
}

q=p->next;
*e=q->data;
p->next=q->next; 
free(q);
return OK;

}

void Display(Linklist *L)
{
LNode *p;
p=(*L)->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

menu1() {
int y,n;
Sqlist L;
Status T;
while(1) {
system("cls");
printf("\n\n\n\n\n\n\n\n");

    printf("\t\t\t\t\t1:创建顺序线性表\n");
    printf("\t\t\t\t\t2:求顺序线性表的长度\n");
    printf("\t\t\t\t\t3:按序号取顺序表元素\n");
    printf("\t\t\t\t\t4:按值查找顺序表\n");
    printf("\t\t\t\t\t5:插入元素\n");
    printf("\t\t\t\t\t6:删除元素\n");
    printf("\t\t\t\t\t7:输出顺序线性表\n");
    printf("\t\t\t\t\t8:返回\n");
    printf("\t\t\t\t\t\t请输入您的选择(1-8)=:");
    scanf("%d",&y);
    if(y==8) break;
    switch(y) { 



         case 1:
         system("cls");
         printf("请输入你要创建的线性表的长度:");
         scanf("%d",&n);
         T=create(&L,n);
         if(T==ERROR)
         printf("创建失败,线性表长度超限!!");
          else
         printf("创建线性表成功!!");
         system("pause");
         break;



            case 2:system("cls");
       Status a;
       a=Findlen1(&L);
       printf("您所建线性表长度为%d\n",n);
       system("pause");
       break;





                    case 3:system("cls");
        int b;
        printf("请输入你想找的数据的序号: ");
        scanf("%d", &n);
        b = GetElem(&L, n);
        printf("该序号的数据为%d\n", b);
        system("pause");
        break;





                       case 4:system("cls");
        printf("请输入你想找的值:");
        scanf("%d", &n);
        b=LocateElem(&L,n);
        if (b == 0)
            printf("线性表中没有该值\n");
        else
            printf("该值在线性表中的第%d位\n", b);
        system("pause");
        break;






                        case 5:system("cls");
       int C;int x;
       printf("请输入你想在哪一个元素前面插入:");
       scanf("%d",&n);
       printf("请输入你想插入的数据:");
       scanf("%d",&x);
                         C= ListInsert_Sq(&L,n,x);
       if(C==1) 
           printf("插入成功");
       else
           printf("插入失败");
       system("pause");
   break;






                          case 6:printf("请输入您想删除的数字:");
       scanf("%d",&n);
                            C=LisDele_Sq(&L,n);
      if(C==1) 
           printf("删除成功");
       else
           printf("删除失败");
       system("pause");break;






                case 7:system("cls");
   Printlist(&L);
   system("pause");
   break;
        default:printf("error"); break;
    }
    printf("\n");
    system("pause");
}
return 1;

}

menu2(){
int z;
while(1)
{
system("cls");
printf("\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t1:创建链式线性表\n");
printf("\t\t\t\t\t2:求链式线性表的长度\n");
printf("\t\t\t\t\t3:按序号取链表元素\n");
printf("\t\t\t\t\t4:按序号取链表元素\n");
printf("\t\t\t\t\t5:插入元素\n");
printf("\t\t\t\t\t6:删除元素\n");
printf("\t\t\t\t\t7:输出链式线性表\n");
printf("\t\t\t\t\t8:返回\n");
printf("\t\t\t\t\t\t请输入您的选择(1-8)=:");
scanf("%d",&z);
if(z==8) break;
switch(z)
{ case 1: printf("这里是创建链式线性表");
int n,num,e,value;
Linklist L;
value=Init_linklist(&L);
if(value)
printf("单链表初始化成功!\n");
else return ERROR;
printf("请输入单链表的长度:") ;
scanf("%d",&n);
Creat_Linklist(&L,n);
printf("单链表中各元素的值为:");
Display(&L);break;
case 2:printf("这里是求链式线性表的长度"); break;
case 3: int n,num,e,value;
printf("这里是按值取链表元素");
printf("\n\n请输入要查找的值e= ");
scanf("%d",&num);
value=Locate_Linklist(&L,num);
if(value>0) printf("该元素在线性表的位序位:%d",value);
else printf("\n无该值,查找失败!"); break;
case 4: int n,num,e,value;
printf("这里是按序号取链表元素");
printf("\n\n请输入要查找的位置:");
scanf("%d",&n);
value=Get_Linklist(&L,n,&e);
if(value) printf("单链表中第%d位的值为%d",n,e);
else printf("\nerror!") ; break;
case 5: int n,num,e,value;
printf("这里是插入元素");
printf("\n请输入插入的位置:");
scanf("%d",&n);
printf("请输入插入的元素:");
scanf("%d",&num);
Insert_Linklist(&L,n,num);
printf("进行插入操作后\n单链表中各元素的值为:");
Display(&L);break;
case 6: int n,num,e,value;
printf("这里是删除元素");
printf("\n\n请输入删除的位置:");
scanf("%d",&n);
Delete_Linklist(&L,n,&e);
printf("被删除元素的值为:%d",e);
printf("\n进行删除操作后\n单链表中各元素的值为:");
Display(&L); break;
case 7:printf("这里是输出链式线性表");
printf("单链表中各元素的值为:");
Display(&L);break;
default:printf("error"); break;}
printf("\n");
system("pause");
return 1;
}
}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答