当前位置 : 主页 > 编程语言 > c语言 >

静态链表操作举例

来源:互联网 收集:自由互联 发布时间:2023-09-07
1.静态链表的初始化 2.malloc()函数实现 3.静态链表长度 4.静态链表的插入操作 5.free()函数实现 6.静态链表的删除操作 7.求集合运算(A-B)U(B-A) 由终端输入集合元素,先建立表示集合A的静

1.静态链表的初始化

2.malloc()函数实现

3.静态链表长度

4.静态链表的插入操作

5.free()函数实现

6.静态链表的删除操作

7.求集合运算(A-B)U(B-A)

由终端输入集合元素,先建立表示集合A的静态链表S,而后输入集合B的元素

同时查找S表,若存在和B相同的元素则从S表中删除之,否则将此元素插入S表。

#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#include<stdio.h>
typedef char ElemType;
typedef int Status;
typedef struct
{
	ElemType data;
	int cur;
}Component,SLinkList[MAXSIZE];
Status InitList(SLinkList space)
{
	int i;
	for(i=0;i<MAXSIZE-1;i++)
	{
		space[i].cur=i+1;
	}
	space[MAXSIZE-1].cur=0;
	return OK;
}
int Malloc_SL(SLinkList space)
{
	int i;
	i=space[0].cur;
	if(space[0].cur)
		space[0].cur=space[i].cur;
	return i;
}
int ListLength(SLinkList L)
{
	int j=0;
	int i;
	i=L[MAXSIZE-1].cur;
	while(i)
	{
		i=L[i].cur;
		j++;
	}
	return j;
}
Status ListInsert(SLinkList L,int i,ElemType e)
{
	int j,k,l;
	k=MAXSIZE-1;
	if(i<1||i>ListLength(L)+1)
		return ERROR;
	j=Malloc_SL(L);//获得空闲分量的下标
	if(j)
	{
		L[j].data=e;
		for(l=1;l<=i-1;l++)
			k=L[k].cur;
		L[j].cur=L[k].cur;
		L[k].cur=j;
		return OK;
	} 
	return ERROR;
}
int Free_SL(SLinkList space,int k)
{
	space[k].cur=space[0].cur;
	space[0].cur=k;
	return 0;
}

Status ListDelete(SLinkList L,int i)
{
	int j,k;
	if(i<1||i>ListLength(L))
		return ERROR;
	k=MAXSIZE-1;
	for(j=1;j<=i-1;j++)
		k=L[k].cur;
	j=L[k].cur;
	L[k].cur=L[j].cur;
	Free_SL(L,j);
	return OK;
}

void difference(Component *space,int *s){
  int r,i,j,p,k;
  int m,n;
  char ch;

  InitList(space);
  *s=Malloc_SL(space);
  r=*s;
  scanf("%d%d",&m,&n);
  for(j=1;j<=m;j++)
  {
     i=Malloc_SL(space);
     scanf("%c",&space[i].data);
     space[r].cur=i;
     r=i;
  }
  space[r].cur=0;
  for(j=1;j<=n;j++)
  {
    scanf("%c",&ch);
    p=*s;
    k=space[*s].cur;
    while(k!=space[r].cur&&space[k].data!=ch)
    {
       p=k;
       k=space[k].cur;
    }
    if(k==space[r].cur)
    {
      i=Malloc_SL(space);
      space[i].data=ch;
      space[i].cur=space[r].cur;
      space[r].cur=i;
    }
    else
    {
      space[p].cur=space[k].cur;
      Free_SL(space,k);
      if(r==k) r=p;
    }
  }
}

int main()
{
   SLinkList sl;
   int x,y;
   Component p;  
   difference(sl,&x);
   y=sl[x].cur;
   while(y)
   {
      printf("%c",sl[y].data);
      y=sl[y].cur;
   }
   return 0;
}


上一篇:MP2 音频帧格式说明及解码流程
下一篇:没有了
网友评论