📄 list.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 + -