急需一个静态链表,请哪位帮忙做个静态链表?

急需一个静态链表,请哪位帮忙做个静态链表?,第1张

definition.h

===========================================

#define MAXSIZE 1000

typedef char ElemType

typedef struct{//定义静态链表结构

ElemType data

unsigned short cur

}component, SLinkList[MAXSIZE]

void Init(component *)//初始化静态链表

component* Insert(component *)//插入宏虚李数据到链表

short Malloc(component *)//分配空间

void Free(component *, short)//回收空间

void Disp(component *, component *)//显示静态链表数据

void Purge(component *, component *)//删除重复数据

void Union(component *, component *, component *)//(A-B)交(B-A)

======================================================

s.c

======================================

#i nclude<stdio.h>

#i nclude"definition.h"

void Init(component *L)//初始化静态链表

{ unsigned short i

for(i=0i<MAXSIZE-1i++)

L[i].cur=i+1

L[MAXSIZE-1].cur=0

}

component* Insert(component *L)//插入数据到链表

{ component *T, *temp1, *temp2

unsigned short i

ElemType ch

if( i=Malloc(L) ){

T=temp1=&L[i]

T->cur=0

} else

return 0

while( (ch=getchar()) != '\n' ){

if( i=Malloc(L) ){

temp2=&L[i]

temp2->data=ch

temp2->cur=0

temp1->cur=i

temp1=temp2

} else

return 0

}

return T

}

short Malloc(component *L)//分配空间

{ unsigned short i

i=L[0].cur

if(L[0].cur){

L[0].cur=L[i].cur

return i//成功返回空间位置

}

return 0//失败返回0

}

void Free(component *L, short i) //回收空间

{ L[i].cur=L[0].cur

L[0].cur=i

}

void Disp(component *T, component *L)//显示静态链表数据

{ while(T->cur){

T=&L[T->cur]

printf("%c", T->data)

} printf("\n")

}

void Purge(component *T, component *L) //删除重复数据

{ component *tmp, *temp

for(T=&L[T->cur]T->dataT=&L[T->cur]){//若T->data中没数据,则退出循环

for(temp=T, tmp=&L[T->cur]tmp->data){//若tmp->data中没数据,则退出循环

if(T->data==tmp->data){

temp->cur=tmp->cur

Free(L, (short)(tmp-L))//回收空间

tmp=&L[temp->cur]

} else{

tmp=&L[tmp->cur]

temp=&L[temp->cur]

} }

} }

void Union(component *A, component *B, component *L)//(A-B)交(B-A)

{ component *T, *ta, *tb=B

short flag//用于判断是否进行了删除 *** 作

B=&L[B->cur]

while(B->data){//循环判断,直到B表中所有数据都和A表比较过后才结蔽迟束

ta=T=A

flag=1//1代表没誉弊有进行删除

while(T->cur){//循环判断,直到A表中所有数据都和B->data比较过后才结束

T=&L[T->cur]

if(T->data==B->data){//如果相等,则删除

ta->cur=T->cur

Free(L, (short)(T-L))

T=&L[ta->cur]

tb->cur=B->cur

Free(L, (short)(B-L))

B=&L[tb->cur]

flag=0//1代表进行了删除

break

} else//不相等则把指针移动到一个数据

ta=&L[ta->cur]

} if(flag){//如果没有进行删除 *** 作,则连接两个结点

T->cur=tb->cur

tb->cur=B->cur

B->cur=0

B=&L[tb->cur]

} }

} ======================================================

main.c

=============================

#i nclude<stdio.h>

#i nclude"definition.h"

int main()

{ SLinkList L

component *A, *B

L[0].data=0

Init(L)//初始化静态链表

printf("请为静态链表A输入数据:")

A=Insert(L)//插入数据到链表A

printf("请为静态链表B输入数据:")

B=Insert(L)//插入数据到链表B

printf("静态链表A的数据为:")

Disp(A, L)

printf("静态链表A的数据为:")

Disp(B, L)

Purge(A, L)//删除A中重复元素

printf("删除A中重复元素后得:")

Disp(A, L)

Purge(B, L)//删除B中重复元素

printf("删除B中重复元素后得:")

Disp(B, L)

Union(A, B, L)//(A-B)交(B-A)

printf("(A-B)交(B-A)得:")

Disp(A, L)

return 0

}

c++和c类似

//静态链表实现线性表

#include <stdio.h>

#include <alloc.h>

#include <stdlib.h>

#define MaxSize 50

typedef char ElemType

typedef struct StatList

{

ElemType data

int next

} StaticList[MaxSize]

//建立静态巧锋链表

void CreateList(StaticList &L,ElemType a[],int n)

{

int i

L[0].next=1

for(i=1i<=ni++)

{

L[i].data=a[i-1]

L[i].next=i+1

}

L[n].next=0

}

//初始化线性表

void InitList(StaticList &L)

{

int j

L[0].next=0

for(j=1j<MaxSizej++)

L[j].next=-1

}

/瞎缺/判断线性表是否为空表

int ListEmpty(StaticList L)

{

return(L[0].next==0)

}

//求线性表的长度

int ListLength(StaticList L)

{

int i=0,j=0

while(L[j].next!=0)

{

i++

j=L[j].next

}

return(i)

}

//输出线性表

void DispList(StaticList L)

{

int j=0

printf("线性表:")

while(L[j].next!=0)

{

j=L[j].next

printf("%c",L[j].data)

}

printf("\n")

}

//求线性表中某个数据元素值

int GetElem(StaticList L,int i,ElemType &e)

{

int k=0,j=L[0].next

while(k<i-1&&j!=0)

{

k++

j=L[j].next

}

if(j==0) return 0

else

{

e=L[j].data

return 1

}

}

//按元素值查找线性表中第一个与某数相等的元素位置

int LocateElem(StaticList L,ElemType e)

{

int j=L[0].next

int i=1

while(j!=0&&L[j].data!=e)

{

j=L[j].next

i++

}

if(j==0) return 0

else return i

}

//插入数据元素

int ListInsert(StaticList &L,int i,ElemType e)

{

int j=L[0].next,j1,j2,k

if(i==1)

{

if(j==0)

{

L[1].data=e

L[0].next=1L[1].next=0

return 1

}

else

{

k=j+1

while(k!=j)

{

if(L[k].next==-1) break

else k=(k+1)%MaxSize

}

if(k!=j)

{

L[k].data=e

L[k].next=L[0].nextL[0].next=k

return 1

}

else return 0

}

}

else

{

k=0

while(k<i-2&&j!=0)

{

k++

j=L[j].next

}

if(j==0) return 0

else

{

j1=jj2=L[j].next

k=j+1

while(k!=j)

{

if(L[k].next==-1) break

else k=(k+1)%MaxSize

}

if(k!=j)

{

L[k].data=e

L[j1].next=kL[k].next=j2

return 1

}

else return 0

}

}

}

//删孝神晌除数据元素

int ListDelete(StaticList &L,int i,ElemType &e)

{

int j=L[0].next,j1,k

if(L[0].next==0) return 0

if(i==1)

{

j1=L[0].next

L[0].next=L[j1].next

e=L[j1].data

L[j1].next=-1

return 1

}

else

{

k=0

while(k<i-2&&j!=0)

{

k++

j=L[j].next

}

if(j==0) return 0

else

{

if(L[j].next==0) return 0

j1=L[j].next

L[j].next=L[j1].next

e=L[j1].data

L[j1].next=-1

return 1

}

}

}

//主函数

int main()

{

StaticList L

char s[MaxSize],e

int i

printf("请输入线性表元素:")

while(scanf("%s",&s))

{

InitList(L)

CreateList(L,s,strlen(s))

DispList(L)

for(i=1i<=5i++)

ListInsert(L,strlen(s)+i,'a'+i-1)

DispList(L)

printf("线性表的长度:%d\n",ListLength(L))

if(!ListEmpty(L))

printf("线性表非空\n")

else printf("线性表是空的\n")

GetElem(L,3,e)

printf("线性表的第三个元素是:%c\n",e)

printf("元素'a'的位置是:%d\n",LocateElem(L,'a'))

ListInsert(L,4,'f')

DispList(L)

ListDelete(L,3,e)

DispList(L)

printf("\n请输入线性表元素:")

}

system("pause")

return 0

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存