怎样创建线性表(C语言)?

怎样创建线性表(C语言)?,第1张

#include"stdio.h"

#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)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12568060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存