#include<malloc.h>
typedef char ElemType
typedef struct LNode
{ElemType data
struct LNode *next
}LinkList
void CreatListF(LinkList *&L,ElemType a[],int n) //头插法建表
{
LinkList *sint i
L=(LinkList *)malloc(sizeof(LinkList))
L->next=NULL
for(i=0i<ni++)
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=a[i]
s->next=L->next
L->next=s
}
}
void CreateListR(LinkList *&L,ElemType a[],int n) //尾插法建陆团表
{
LinkList *s,*rint i
L=(LinkList *)malloc(sizeof(LinkList))
r=L
for(i=0i<ni++)
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=a[i]
r->next=s
r=s
}
r->next=NULL
}
void InitList(LinkList *&L)//初始化线性表
{
L=(LinkList *)malloc(sizeof(LinkList))
L->next=NULL
}
void DestroyList(LinkList *&L) //销毁线性表
{
LinkList *p=L,*q=p->next
while(q!=NULL)
{
free(p)
p=q
q=p->next
}
free(p)
}
int ListEmpty(LinkList *L)//判断线性表是否为空
{
return(L->next==NULL)
}
int ListLength(LinkList *L)//求线性表的长度
{
LinkList *p=Lint n=0
while(p->next!=NULL)
{
n++p=p->next
}
return(n)
}
void DispList(LinkList *L) //输出线性表
{
LinkList *p=L->next
while(p!=NULL)
{
printf("%c",p->data)
p=p->next
}
}
int GetElem(LinkList *L,int i,ElemType &e) //求线性表中某个数据和晌元素值
{
int j=0
LinkList *p=L
while(j<i&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)
return 0
else
{
e=p->datareturn 1
}
}
int LocateElem(LinkList *L,ElemType e)//按元素值查找
{
LinkList *p=L->next
int i=1
while(p!=NULL&&p->data!=e)
{
p=p->nexti++
}
if(p==NULL)return(0)
else return(i)
}
int ListInsert(LinkList *&L,int i,ElemType e) //插入数据元素早棚橘
{
int j=0
LinkList *p=L,*s
while(j<i-1&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)return 0
else
{
s=(LinkList *)malloc(sizeof(LinkList))
s->data=es->next=p->nextp->next=s
return 1
}
}
int ListDelete(LinkList *&L,int i,ElemType &e) //删除数据元素
{
int j=0
LinkList *p=L,*q
while(j<i-1&&p!=NULL)
{
j++p=p->next
}
if(p==NULL)
return 0
else
{
q=p->next
if(q==NULL)return 0
e=q->data
p->next=q->next
free(q)
return 1
}
}
int main()
{
ElemType e,a[5]={'a','b','c','d','e'}
LinkList *h
InitList(h) //初始化顺序表h
CreateListR(h,&a[0],5)//依次采用尾插入法插入a,b,c,d,e元素
printf("单链表为:")
DispList(h) printf("\n")//输出顺序表h
printf("该单链表的长度为:")
printf("%d",ListLength(h))printf("\n") //输出顺序表h的长度
if(ListEmpty(h)) printf("该单链表为空。\n")
else printf("该单链表不为空。\n") //判断顺序表h是否为空
GetElem(h,3,e)printf("该单链表的第3个元素为:")
printf("%c",e)printf("\n") //输出顺序表h的第3个元素
printf("该单链表中a的位置为:")
printf("%d",LocateElem(h,'a'))printf("\n") //输出元素'a'的位置
ListInsert(h,4,'f') //在第4个元素位置插入'f'素
printf("在第4 个元素位置上插入'f'后单链表为:")
DispList(h)printf("\n") //输出顺序表h
ListDelete(h,3,e) //删除L的第3个元素
printf("删除第3个元素后单链表为:")
DispList(h)printf("\n") //输出顺序表h
DestroyList(h)//释放顺序表h
return 0
}
#include<stdio.h>#include<iostream.h>
#include<stdlib.h>
#defineOVERFLOW -2
#define OK 1
#define ERROR 0
#defineLIST_INIT_SIZE 100
#defineLISTINCREMENT 10
typedef intElemType
typedef intStatus
//定义顺序存储段派羡结构
typedef struct
{
ElemType *elem
int length
int listsize
}SqList
//初始化顺序表
StatusInitList_Sq(SqList &L)
{
L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType))
if(!L.elem ) exit(ERROR)
L.length =0
L.listsize =LIST_INIT_SIZE
return OK
}
//自定义创建顺序表
voidCreate_SqList(SqList &L)
{
int c,i=0
int *newBase
printf("请输入顺序表元素:\n")
while((scanf("%d",&c))!=EOF)
{
if(i>=L.listsize) //自定义顺序表大小超过初始化大小
{
newBase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))
//为初始顺序表以LISTINCREMENT大小重新增加存储空间
if(!newBase)exit(OVERFLOW)
L.elem=newBase
L.listsize+=LISTINCREMENT
}
L.elem[i++]=c
}
L.length=i
printf("输入的顺序表元素:\n")
for(i=0i<L.lengthi++)
printf("%d "羡拿,L.elem[i])
printf("\n")
}
//在指定位置插入元素
StatusListInsert(SqList &L,int i,ElemType e)
{
ElemType *p,*q,*newbase
if(i<1||i>L.length+1)
{
printf("插入位置错误\握拍n")
return(ERROR)
}
if(L.length>=L.listsize)
{
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))
if(!newbase) exit(OVERFLOW)
L.elem=newbase
L.listsize+=LISTINCREMENT
}
if(i==L.length) L.elem[i+1]=e
q=&(L.elem[i-1])
for(p=&(L.elem[L.length-1])p>=q--p)*(p+1)=*p
*q=e
++L.length
return OK
}
//在指定位置删除元素
StatusListDelete_Sq(SqList &L,int i,ElemType *e)
{
ElemType *p,*q
if(i<1||i>L.length+1)
return ERROR
p=&(L.elem[i-1])
*e=*p
q=L.elem+L.length-1
for(++pp<=q++p)
*(p-1)=*p
--L.length
return OK
}
void main()
{
SqList L
int m,n
int location,element
if(!InitList_Sq(L))
{
printf("初始化顺序表失败!\n")
exit(ERROR)
}
Create_SqList(L)
for(m=0m<3m++)
{
printf("输入插入位置:")
scanf("%d",&location)
while(location>L.length+1||location<1)
{
printf("输入位置错误,请重新输入!\n")
scanf("%d",&location)
}
printf("插入元素:")
scanf("%d",&element)
if(!ListInsert(L,location,element))
{
printf("顺序表插入失败!\n")
exit(ERROR)
}
printf("插入顺序表为:\n")
for(int i=0i<=L.length -1i++)
{
printf("%d ",L.elem[i])
}
printf("\n新顺序表一共有%d个元素。\n",L.length)
}
for(n=0n<3n++)
{
printf("输入删除位置:")
scanf("%d",&location)
while(location>L.length||location<1)
{
printf("输入位置错误,请重新输入!\n")
scanf("%d",&location)
}
if(!ListDelete_Sq(L,location,&element))
{
printf("删除错误!\n")
exit(ERROR)
}
printf("被删除的元素为:%d \n",element)
printf("被删除后的顺序表为:\n")
for(int j=0j<=L.length-1j++)
{
printf("%d ",L.elem[j])
}
printf("\n新顺序表一共有%d个元素。\n",L.length)
}
}
这个是我最近编写的 顺序表也是线性表的
这里还有链表的程序 用的话再传给你
for(int *p = *(l->elem[l->巧困length- 1])p >= q--p)在for语句里,p被声明指氏弯针,但是你赋的值*(l->elem[l->length- 1])并不是指针
猜测你的意思,应该改孝核念为:
for(int *p = &(l->elem[l->length- 1])p >= q--p)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)