预备知识
1.线性表的静态单链表存储结构
#include<stdio.h> #include<string.h> typedef int Status ; #define N 6 typedef char ElemType[N]; typedef struct { ElemType data; int cur; }SLinkList; void main() { SLinkList s[]={{"",1},{"zhao",2},{"qian",3},{"sun",4},{"li",5},{"zhou",6},{"wu",7},{"zheng",8},{"wang",0}}; int i; i=s[0].cur; while(i) { printf("%s ",s[i].data); i=s[i].cur; } printf("\n"); s[4].cur=9; s[9].cur=5; strcpy(s[8].data,"shi");//这里注意是s[8].data s[6].cur=8; i=s[0].cur; while(i) { printf("%s ",s[i].data); i=s[i].cur; } printf("\n"); }
程序运行结果如下:
2.初始化线性表L
#include<stdio.h> typedef int Status; typedef int ElemType; #define MAXSIZE 10 typedef struct { ElemType data; int cur; }SLinkList[MAXSIZE]; void InitList(SLinkList L) { int i=1; L[MAXSIZE-1].cur=0; while(i<MAXSIZE-2) { L[i].cur=i+1; i++; } L[MAXSIZE-2].cur=0; } void main() { SLinkList L; InitList(L); printf("初始化完成!\n"); }
程序运行结果如下:
向线性表L中插入1~5
#include<stdio.h> #include<string.h> typedef int Status; #define ERROR 0 #define OK 1 typedef int ElemType; #define MAXSIZE 10 typedef struct { ElemType data; int cur; }SLinkList[MAXSIZE]; void InitList(SLinkList L) { int i=0; L[MAXSIZE-1].cur=0; while(i<MAXSIZE-2) { L[i].cur=i+1; ++i; } L[MAXSIZE-2].cur=0; } Status ListLength(SLinkList L) { int j=1,i=L[MAXSIZE-1].cur; while(i) { ++j; i=L[i].cur; } return j; } int Malloc(SLinkList space) { int i=space[0].cur; if(i) space[0].cur=space[i].cur; return i; } Status ListInsert(SLinkList L,int i,ElemType e) { int l,j,k=MAXSIZE-1; if(i<1||i>ListLength(L)+1) return ERROR; j=Malloc(L); if(j) { L[j].data=e; for(l=1;l<i;l++) k=L[k].cur; L[j].cur=L[k].cur; L[k].cur=j; return OK; } return ERROR; } Status GetElem(SLinkList L,int i,ElemType *e) { int l=1,k=MAXSIZE-1; if(i<1||i>ListLength(L)) return ERROR; while(l<=i) { k=L[k].cur; l++; } *e=L[k].data; return OK; } void Free(SLinkList space ,int k) { space[k].cur=space[0].cur; space[0].cur=k; } void ListTraverse(SLinkList L,void(*visit)(ElemType)) { int i=L[MAXSIZE-1].cur; while(i) { visit(L[i].data); i=L[i].cur; } printf("\n"); } void print(ElemType c) { printf("%d ",c); } void main() { int j; Status i; SLinkList L; InitList(L); for(j=1;j<=5;j++) i=ListInsert(L,j ,j); printf("L="); ListTraverse(L,print); }
程序运行如下:
2.13定位线性表L中的元素位置
#include<stdio.h> #include<string.h> typedef int Status; #define ERROR 0 #define OK 1 typedef int ElemType; #define MAXSIZE 10 typedef struct { ElemType data; int cur; }SLinkList[MAXSIZE]; void InitList(SLinkList L) { int i=0; L[MAXSIZE-1].cur=0; while(i<MAXSIZE-2) { L[i].cur=i+1; ++i; } L[MAXSIZE-2].cur=0; } Status ListLength(SLinkList L) { int j=1,i=L[MAXSIZE-1].cur; while(i) { ++j; i=L[i].cur; } return j; } int Malloc(SLinkList space) { int i=space[0].cur; if(i) space[0].cur=space[i].cur; return i; } Status ListInsert(SLinkList L,int i,ElemType e) { int l,j,k=MAXSIZE-1; if(i<1||i>ListLength(L)+1) return ERROR; j=Malloc(L); if(j) { L[j].data=e; for(l=1;l<i;l++) k=L[k].cur; L[j].cur=L[k].cur; L[k].cur=j; return OK; } return ERROR; } Status GetElem(SLinkList L,int i,ElemType *e) { int l=1,k=MAXSIZE-1; if(i<1||i>ListLength(L)) return ERROR; while(l<=i) { k=L[k].cur; l++; } *e=L[k].data; return OK; } void Free(SLinkList space ,int k) { space[k].cur=space[0].cur; space[0].cur=k; } void ListTraverse(SLinkList L,void(*visit)(ElemType)) { int i=L[MAXSIZE-1].cur; while(i) { visit(L[i].data); i=L[i].cur; } printf("\n"); } int LocateElem(SLinkList L,ElemType e) { int j=1,i=L[MAXSIZE-1].cur; while(i&&L[i].data!=e) { i=L[i].cur; ++j; } return j; } void print(ElemType c) { printf("%d ",c); } void main() { int j; Status i; SLinkList L; InitList(L); for(j=1;j<=5;j++) i=ListInsert(L,j ,j); printf("L="); ListTraverse(L,print); j=LocateElem(L,3); printf("L中元素3所处的位置是:%d\n",j); }
程序运行如下:
2.14初始化线性表L
#include<stdio.h> #include<string.h> typedef int Status; #define ERROR 0 #define OK 1 typedef int ElemType; #define MAXSIZE 10 typedef struct { ElemType data; int cur; }SLinkList[MAXSIZE]; void InitList(SLinkList L) //进行初始化 { int i=0; L[MAXSIZE-1].cur=0; while(i<MAXSIZE-2) { L[i].cur=i+1; ++i; } L[MAXSIZE-2].cur=0; } void main() { int j; Status i; SLinkList L; InitList(L); printf("成功初始化线性表L\n"); }
程序运行如下:
2.14若备用空间链表非空,则返回分配的结点下标(见插入函数)
#include<stdio.h> #include<string.h> typedef int Status; #define ERROR 0 #define OK 1 typedef int ElemType; #define MAXSIZE 10 typedef struct { ElemType data; int cur; }SLinkList[MAXSIZE]; void InitList(SLinkList L) { int i=0; L[MAXSIZE-1].cur=0; while(i<MAXSIZE-2) { L[i].cur=i+1; ++i; } L[MAXSIZE-2].cur=0; } Status ListLength(SLinkList L) { int j=1,i=L[MAXSIZE-1].cur; while(i) { ++j; i=L[i].cur; } return j; } int Malloc(SLinkList space) { int i=space[0].cur; if(i) space[0].cur=space[i].cur; return i; } Status ListInsert(SLinkList L,int i,ElemType e) { int l,j,k=MAXSIZE-1; if(i<1||i>ListLength(L)+1) return ERROR; j=Malloc(L); if(j) { L[j].data=e; for(l=1;l<i;l++) k=L[k].cur; L[j].cur=L[k].cur; L[k].cur=j; return OK; } return ERROR; } void ListTraverse(SLinkList L,void(*visit)(ElemType)) { int i=L[MAXSIZE-1].cur; while(i) { visit(L[i].data); i=L[i].cur; } printf("\n"); } void print(ElemType c) { printf("%d ",c); } void main() { int j; Status i; SLinkList L; InitList(L); for(j=1;j<=5;j++) i=ListInsert(L,j ,j); printf("L="); ListTraverse(L,print); }
程序运行如下:
时间: 2024-10-07 02:34:28