静态链表staticList.h
#include <stdio.h> #define MAXSIZE 1000 #define ERROR 0 #define OK 1 #define FALSE 0 #define TRUE 1 typedef int Status; typedef int ElemType; typedef struct{ ElemType data; //数据 int cur; //游标(Cursor) } Component,StaticLinkList[MAXSIZE]; void ShowMenu(); void ShowList(StaticLinkList space); Status InitList(StaticLinkList space); int Malloc_SLL(StaticLinkList space); int ListLength(StaticLinkList space); Status ListInsert(StaticLinkList space,int i,ElemType e); Status ListDelete(StaticLinkList space,int i); void Free_SLL(StaticLinkList sppace,int k);
staticList.c
#include "staticList.h" int main(){ int cmd,i; ElemType e; StaticLinkList space; ShowMenu(); scanf("%d",&cmd); while(cmd){ switch(cmd){ case 1: InitList(space); break; case 2: ShowList(space); break; case 3: printf("请输入插入位置和数据:"); scanf("%d %d",&i,&e); if(!i){ break; } if(ListInsert(space,i,e)!=OK){ printf("插入失败!\n"); } while(i){ printf("请输入插入位置和数据:"); getchar(); scanf("%d %d",&i,&e); if(!i){ break; } if(ListInsert(space,i,e)!=OK){ printf("插入失败!\n"); } } break; case 4: printf("请输入删除元素的位置:"); scanf("%d",&i); if(!i){ break; } if(ListDelete(space,i)!=OK){ printf("删除失败!\n"); } while(i){ printf("请输入删除元素的位置:"); getchar(); scanf("%d",&i); if(!i){ break; } if(ListDelete(space,i)!=OK){ printf("删除失败!\n"); } } break; case 0:exit(0);break; default:exit(-1);break; } ShowMenu(); getchar(); scanf("%d",&cmd); } return 0; } void ShowMenu(){ char *str="\t\t*******************************"; printf("%s\n",str); printf("\t\t1.初始化链表\n"); printf("\t\t2.显示链表数据\n"); printf("\t\t3.插入数据\n"); printf("\t\t4.删除数据\n"); printf("\t\t0.退出\n"); printf("%s\n",str); } void ShowList(StaticLinkList space){ int i,j,k; j=0; k=space[0].cur; i=space[MAXSIZE-1].cur; if(i!=0){ printf("\t\t"); while(i){ if(j%5==0){ printf("\n"); printf("\t\t"); } j++; printf("%d ",space[i].data); i=space[i].cur; } printf("\n"); }else{ printf("\t\t空表\n"); } } Status InitList(StaticLinkList space){ int i; for(i=0;i<MAXSIZE-1;i++){ space[i].cur=i+1; } space[MAXSIZE-1].cur=0; return OK; } int Malloc_SLL(StaticLinkList space){ int i=space[0].cur; if(space[0].cur){ space[0].cur = space[i].cur; } return i; } int ListLength(StaticLinkList space){ int i,j,length; i=space[MAXSIZE-1].cur; length=0; if(i==0){ length=0; }else{ j=space[0].cur; while(i){ length++; i=space[i].cur; } } return length; } Status ListInsert(StaticLinkList space,int i,ElemType e){ int j,k,l; k=MAXSIZE-1; if(i<1||i>ListLength(space)+1){ return ERROR; } j=Malloc_SLL(space); if(j){ space[j].data=e; for(l=1;l<i;l++){ k=space[k].cur; } space[j].cur=space[k].cur; space[k].cur=j; return OK; } return ERROR; } Status ListDelete(StaticLinkList space,int i){ int j,k; k=MAXSIZE-1; if(i<1||i>ListLength(space)){ return ERROR; } for(j=1;j<i;j++){ k=space[k].cur; } j=space[k].cur; space[k].cur=space[j].cur; Free_SLL(space,j); return OK; } void Free_SLL(StaticLinkList space,int k){ space[k].cur=space[0].cur; space[0].cur=k; }