#include <malloc.h>
#define MaxSize 50
typedef char ElemType
typedef struct
{
ElemType elem[MaxSize]
int length
}SqList
void InitList(SqList *L) /型尘* 初始化顺序表 */
{
L=(SqList *)malloc(sizeof(SqList))
L->length=0
}
void CreateListR(SqList *L,ElemType a[],int n) /*创建顺序表 */
{
int i
for(i=0i<ni++)
L=(SqList *)malloc(sizeof(SqList))
L->elem[i]=a[i]
L->length++
}
void DispList(SqList *L) /* 输出顺序表 */
{
int i
if(ListEmpty(L)) return
for(i=0i<L->lengthi++)
printf("%c",L->elem[i])
printf("\n")
}
int ListLength(SqList *L) /* 求顺序表的长度 */卜携禅
{
return(L->length)
}
int ListEmpty(SqList *L) /* 求顺序表是否为空 */
{
return(L->length==0)
}
int GetElem(SqList *L,int i,ElemType e) /*求顺序表中某个数据的元素值 */
{
if(i<1||i>L->length)
return 0
else
e=L->elem[i-1]
return 1
}
int LocateElem(SqList *L,ElemType e)/*按值查找元素*/
{
int i=0
while(i<L->length&&L->elem[i]!=e) i++
if(i>=L->length)
return 0
else
return i+1
}
int ListInsert(SqList *L,int i,ElemType e) /*按i位隐嫌置插入元素*/
{
int j
if(i<1||i>L->length+1)
return 0
i--
for (j=L->lengthj>ij--)
L->elem[j]=L->elem[j-1]
L->elem[i]=e
L->length++
return 1
}
int ListDelete(SqList *L,int i,ElemType e) /*删除某个位置的元素*/
{
int j
if (i<1||i>L->length)
return 0
i--
e=L->elem[i] /*e中的放elem[i]有何用..以后没用到*/
for(j=ij<L->length-1j++)
L->elem[j]=L->elem[j+1]
L->length--
return 1
}
void DestroyList(SqList *L) /*销毁链表*/
{
free(L)
}
void main()
{
SqList L
ElemType a[]={'a','b','c','d'}
int c
int e
while(1)
{
printf("Please Choose the step you want ?\n\n")
scanf("%d",&c)
if(c==0) break
switch(c)
{
case 1: InitList(&L)break
case 2: CreateListR(&L,a,4)break
case 3: DispList(&L)break
case 4: printf("long %d", ListLength(&L))break
case 5: printf("%d",ListEmpty(&L))break
case 6: GetElem(&L,3,e)break
case 7: LocateElem(&L,'a')break
case 8: ListInsert(&L,4,'f')break
case 9: DispList(&L)break
case 10: ListDelete(&L,3,e)break
case 11: DispList(&L)break
case 12: DestroyList(&L)break
default: printf("error data")break
}
}
}
#include<stdio.h>#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef int status
typedef int ElemType
typedef struct{
ElemType *elem
int length,listsize
}SqList
status InitList(SqList &L)//初始化
{
L.elem=(int *)malloc(100*sizeof(int))
if(!L.elem) exit(-2)
L.listsize=100
L.length=0
return 1
}
/*先建立新表埋汪*/
status Build(SqList &L)
{
int i,n
printf("请输入元素个数闹液槐n和n个元素\n")
scanf("%d",&n)
//if(n>LIST_INIT_SIZE)
for(i=0i<ni++)
scanf("%d",L.elem+i)
L.length=n
return 1
}
/*输液友出表中元素和长度*/
void Print(SqList &L)
{
int i
for(i=0i<L.lengthi++)
printf("%d ",*(L.elem+i))
printf("\n长度为:%d\n\n",L.length)
}
/*删除值为X的元素*/
status ListDelete1(SqList &L,int x)
{
int i
for(i=0i<L.lengthi++)
if(*(L.elem+i)==x)
break
if(i==L.length)
return 0
for(i++i<L.lengthi++)
*(L.elem+i-1)=*(L.elem+i)
L.length--
return 1
}
/*逆置函数*/
void Inverse(SqList &L)
{
int i,t
for(i=0i<L.length/2i++)
{
t=*(L.elem+i)
*(L.elem+i)=*(L.elem+L.length-i-1)
*(L.elem+L.length-i-1)=t
}
printf("表逆置成功!!!\n")
}
/*(升序)*/
void Sort(SqList &L)
{
int i,j,t
for(i=1i<L.lengthi++)
for(j=0j<L.length-ij++)
{
if(*(L.elem+j)>*(L.elem+j+1))
{
t=*(L.elem+j)
*(L.elem+j)=*(L.elem+j+1)
*(L.elem+j+1)=t
}
}
printf("已升序\n")
}
/*合并两个线性表*/
status Merger(SqList &L,SqList &Lb)
{
int i,j,k
SqList Lc
InitList(Lc)
if(Lc.listsize<L.length+Lb.length)
{
Lc.elem=(ElemType *)realloc(Lc.elem,(L.length+Lb.length+LISTINCREMENT)*sizeof(ElemType))
if(!L.elem) exit(-2)
Lc.listsize=L.length+Lb.length+LISTINCREMENT
}
i=j=k=0
while(i<L.length &&j<Lb.length)
{
if(*(L.elem+i) <*(Lb.elem+j))
{
*(Lc.elem+k)=*(L.elem+i)
k++i++
}
else
{
*(Lc.elem+k)=*(Lb.elem+j)
k++j++
}
}
while(i<L.length)
{
*(Lc.elem+k)=*(L.elem+i)
k++i++
}
while(j<Lb.length)
{
*(Lc.elem+k)=*(Lb.elem+j)
k++j++
}
Lc.length=L.length+Lb.length
L=Lc
return 1
}
/*将X插入,使仍然有序*/
status ListInsert(SqList &L,int x)
{
int i,k
if(L.length>=L.listsize)
{
L.elem=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))
if(!L.elem) exit(-2)
L.listsize+=LISTINCREMENT
}
for(i=0i<L.lengthi++)
if(x<*(L.elem+i))
break
k=i
for(i=L.lengthi>ki--)
*(L.elem+i)=*(L.elem+i-1)
*(L.elem+k)=x
L.length++
return 1
}
/*提示函数*/
void Tips()
{
printf("请选择你的想要的 *** 作:\n")
printf("<1>输出顺序表及顺序表的长度\n")
printf("<2>删除值为x的结点\n")
printf("<3>将顺序表逆置\n")
printf("<4>将顺序表按升序排序\n")
printf("<5>将x插入到顺序表的适当位置上\n")
printf("<6>将两个有序表合并\n")
printf("<0>退出\n\n")
}
int main()
{
SqList L,Lb
InitList(L)
Build(L)
int a,x,flag
//SqList L,Lb
Tips()
scanf("%d",&a)
while(a)
{
switch(a)
{
case 1:
{ Print(L)
break}
case 2:
{ printf("请输入要删除的数据X:\n")
scanf("%d",&x)
flag=ListDelete1(L,x)
if(flag)
printf("删除成功!!\n\n")
else
printf("元素不存在,删除失败!!\n\n")
break}
case 3:
Inverse(L)
break
case 4:
Sort(L)
break
case 5:
printf("请输入要插入的数据X:\n")
scanf("%d",&x)
flag=ListInsert(L,x)
if(flag)
printf("插入成功!!\n\n")
else
printf("插入失败!!\n\n")
break
case 6:
printf("请输入Lb的内容:\n")
InitList(Lb)
Build(Lb)
flag=Merger(L,Lb)
if(flag)
printf("合并成功!!\n\n")
break
//default
Tips()
scanf("%d",&a)
}
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)