这是有关数据结构的例程序

源代码在线查看: 静态链表的建立和操作.txt

软件大小: 89 K
上传用户: uimeet
关键词: 数据结构 程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				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)
				======================================================
				
				
				functions.c
				======================================
				#include
				#include"definition.h"
				
				void Init(component *L)//初始化静态链表
				{ unsigned short i;
				
				for(i=0; i				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->data; T=&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
				=============================
				#include
				#include"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;
				}
				
							

相关资源