⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.c

📁 线性表的添加、删除、插入
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>

#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10

typedef struct{
  int *elem;
  int length;
  int listsize;
}SqList;

typedef struct LNode{
  int data;
  struct LNode *next;
}LNode,*LinkList;

void print1(SqList *L);
void print0(LinkList L);
SqList*  create1 ()//SqList *L
{ int n;
  int i;
  SqList *L;
  printf("\nPlease input the length!");
  scanf("\n%d",&n);

  L->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
  if(!L->elem) printf("\nERROR!");
  L->length=0;
  L->listsize=LIST_INIT_SIZE;
  printf("\nPlease enter the elems!");
  for(i=0;i<n;i++)
     { scanf("\n%d",&(L->elem[i]));
       L->length++;
     }
  print1(L);
  return L;
 // printf( "\nOK");
}

LinkList  create0 ()
{ int n;
  int y;

  LNode *L;
  LNode *last;
  LNode *p;
   printf("\nPlease input the length!");
  scanf("\n%d",&n);
  L=(LNode*)malloc(sizeof(LNode));
  if(!L) printf( "\nERROR");
  last=L;
  printf("\nPlease enter elements!");
  for( y=1;y<=n;y++)
  { p=(LNode*)malloc(sizeof(LNode));
    scanf("\n%d",&p->data);
    last->next=p;
    last=p;
  }
  last->next=NULL;
  print0(L);
  return L;
 // return OK;
}

void getlength1 (SqList *L)
{ // for(int i=0;L.elem[i]!=NULL;i++);
  // L.length=i;
   printf("\nThe length of this list is %d.",L->length);
}

void getlength0 (LinkList L)
{
    int i;
    for( i=0;L->next!=NULL;i++)
       L=L->next;
    printf("\nThe length of this list is %d.",i);
}

void add1 (SqList *L)
{   int *p;
    int *q;
    int i;
    int e;
    int *newbase;
    printf("\nEnter locate!");
    scanf("\n%d",&i);
    printf("\nEnter element!");
    scanf("\n%d",&e);
    if(i<1||i>(L->length+1)) printf( "\nERROR");
    if(L->length>=L->listsize)
    {  newbase=(int*)realloc(L->elem,(L->listsize+LISTINCREAMENT)*sizeof(int));
       if(!newbase) printf("\nERROR");
       L->elem=newbase;
       L->listsize+=LISTINCREAMENT;
    }
    q=&(L->elem[i-1]);
    for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;
    *q=e;
    ++L->length;
    print1(L);
    //return OK;
}

void add0 (LinkList L)
{   LNode *p;
    LinkList s;
    int j;
    int i;
    int e;
    j=0;
    printf("\nEnter locate!");
    scanf("\n%d",&i);
    printf("\nEnter element!");
    scanf("\n%d",&e);
    p=L;
    while(p&&j<i-1){p=p->next;++j;}
    if(!p||j>i-1) printf("\nERROR");
    s=(LinkList)malloc(sizeof(LNode));
    s->data=e;
    s->next=p->next;
    p->next=s;
    print0(L);
   // return OK;
}

void Delete1 (SqList *L)
{   int *p;
    int *q;
    int e;
    int i;
    printf("\nEnter the index.");
    scanf("\n%d",&i);
    if((i<1)||(i>L->length)) printf(" \nERROR");
    p=&(L->elem[i-1]);
    e=*p;
    printf("\nDelete %d",e);
    q=L->elem+L->length-1;
    for(++p;p<=q;++p) *(p-1)=*p;
    --L->length;
    //return OK;
}

void Delete0 (LinkList L)
{   LNode *p;
    LNode *q;
    int i;
    int e;
    int j=0;
    p=L;
    printf("\nEnter the index.");
    scanf("\n%d",&i);
    while(p->next&&j<i-1)
    {  p=p->next;
       ++j;
    }
    if(!(p->next)||j>i-1) printf("\nERROR");
    q=p->next;
    e=q->data;
    p->next=q->next;
    printf("\nDelete %d.",e);
    free(q);
   // return OK;
}

void getelem1 (SqList *L)
{ int i;
  printf("\nEnter the index.");
  scanf("\n%d",&i);
  printf("\nThe element is %d.",L->elem[i-1]);

}

void getelem0 (LinkList L)
{  int j;
   int i;
   int e;
   LNode *p;
   p=L->next;
   j=1;
   printf("\nEnter the index.");
   scanf("\n%d",&i);
   while(p&&j<i) {p=p->next;++j;}
   if(!p||j<i) printf(" \nERROR");
   e=p->data;
   printf("\nThe element is %d.",e);
  // return OK;
}

    //setelem1 (SqList &L,int i,int e);
    //setelem0 (LinkList &L,int i,int e);
void print1 (SqList *L)
{  int i;
   printf("\nSqList(now):");
   for( i=0;i<L->length;i++)
    {   printf("%d  ",L->elem[i]);

    }
}

void print0 (LinkList L)
{ // int i;
  LinkList p=L->next;
   printf("\nLinkList(now):");
  // for(i=0;L->next!=NULL;i++)
  while(p!=NULL)
   { printf("%d  ",p->data);
	 p=p->next;
   }
}

void printmenu()
{   printf("\n*****MENU*******");
    printf("\n print*******1   ");
    printf("\n getlength***2   ");
    printf("\n add*********3   ");
    printf("\n delete******4  ");
    printf("\n getelem*****5   ");
    printf("\n exit********0   ");
}










void main()
{
   int x,a,b;
   SqList *m;
   LinkList n;
label:   printf("\nchoose the way:");
   printf("\nsqlist***1,linklist***0");
   scanf("\n%d",&x);
   if(x==1)
   { printf("\nCreate a SqList.");
     m=create1();
     printmenu();
     scanf("\n%d",&a);
     while(a!=0)
     { switch(a)
       { case 1: print1(m);break;
	 case 2: getlength1 (m); break;
	 case 3: add1 (m); break;
	 case 4: Delete1 (m); break;
	 case 5: getelem1 (m); break;
	 default: printf("\nInput Errror!");
       }
       scanf("\n%d",&a);
     }
   }
   if(x==0)
   { printf("\nCreate a LinkList.");
     n=create0();
     printmenu();
     scanf("\n%d",&b);
     while(b!=0)
     { switch(b)
       { case 1:print0 (n);break;
	 case 2:getlength0 (n); break;
	 case 3:add0 (n);  break;
	 case 4:Delete0 (n);  break;
	 case 5:getelem0 (n);   break;
	 default: printf("\nInput Error!");
       }
       scanf("\n%d",&b);
     }

    }
     if(x!=1&&x!=0) {printf("\nwrong opinoin");

     //scanf("%d",&x);
     goto label;}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -