#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;
}
}