数据结构(线性表):线性表的静态链式表示

来源:互联网 发布:大数据建设开展情况 编辑:程序博客网 时间:2024/05/16 09:19

/**数据结构:线性表的静态链式表示*单链表 静态链表*线性表元素序号从1算起*L[0]专设为头结点*Date:2017/4/14*/#include <stdio.h>#include <stdlib.h>#define InitSize 100#define ElemType chartypedef struct LNode{ElemType data;int length;int next;//next为指针,next==1相当于指针为NULLbool free;//free=true,表示此空间已被利用;free=false,表示此空间未被利用}LinkList[InitSize];void initList(LinkList L);//静态链表初始化void createList1(LinkList &L);//头插法建立单链表void createList2(LinkList &L);//尾插法建立单链表int getElem(LinkList L,int i);//按序号查找表结点值int locateElem(LinkList L,ElemType e);//按值按序号顺序查找表结点在链表L中第一次出现的位置void listInsert(LinkList L,int i,ElemType e);//在第i个结点位置插入新结点,元素值为evoid listDelete(LinkList L,int i,ElemType *e);//删除第i个结点,用e返回删除元素的值void printList(LinkList L);//按先后序号打印链表bool emptyList(LinkList L);//判断链表是否为空,为空就返回true,否则返回falseint lengthList(LinkList L);//返回链表长度void destoryList(LinkList L);//销毁链表void initList(LinkList L){int i;for(i=0;i<InitSize;i++){L[i].free = false;}}void createList1(LinkList &L){char ch;L[0].length = 0;L[0].next = -1;L[0].free = true;int i = 1;while(scanf("%c",&ch) != EOF && ch != '\n' && L[0].length < InitSize){L[i].data = ch;L[i].next = L[0].next;L[0].next = i;L[i].free = true;L[0].length++;i++;//scanf("%c",&ch);}//return L;}void createList2(LinkList &L){char ch;L[0].length = 0;L[0].next = -1;//让尾指针指向-1L[0].free = true;int i = 1;while(scanf("%c",&ch) != EOF && ch != '\n' && L[0].length < InitSize){L[i].data = ch;L[i-1].next = i;L[i].next = -1;L[i].free = true;L[0].length++;i++;}//return L;}/*LNode getElem(LinkList L,int i){int j = 1;int j = L[0].next;while(j != -1 && j != i){j = L[j].next;}return L[j];}*/int getElem(LinkList L,int i){int j = 1;int pos = L[0].next;while(pos != -1 && j < i){pos = L[pos].next;j++;}return pos;}int locateElem(LinkList L,ElemType e){int pos = L[0].next;while(pos != -1 && L[pos].data != e){pos = L[pos].next;}return pos;}int findFree(LinkList L){int i = 1;while(L[i].free && i < InitSize){i++;}return i;}void listInsert(LinkList L,int i,ElemType e){if(L[0].length < InitSize){int j = getElem(L,i-1);int index = findFree(L);//找到空位置L[index].data = e;L[index].next =  L[j].next;L[j].next = index;L[0].length++;}}void listDelete(LinkList L,int i,ElemType *e){int j = getElem(L,i-1);int pos = L[j].next;*e = L[pos].data;L[j].next = L[pos].next;L[pos].free = false;L[0].length--;}void printList(LinkList L){int i = L[0].next;while(i != -1){printf("%c ",L[i].data);i = L[i].next;}printf("\n");}bool emptyList(LinkList L){if(L[0].next == -1){return true;}else{return false;}}void destroyList(LinkList L){//L是静态数组int i;for(i=0;i<InitSize;i++){L[i].free = false;}printf("已销毁链表");}int lengthList(LinkList L){return L[0].length;}int main(){freopen("in.txt","r",stdin);printf("/*************************单链表 静态链表****************************/\n\n\n");LinkList L1,L2;/*if(emptyList(L1)){printf("L1为空\n");}else{printf("L1不为空\n");}*/initList(L1);initList(L2);createList1(L1);createList2(L2);printList(L1);printList(L2);printf("L1长度:%d\nL2长度:%d\n",lengthList(L1),lengthList(L2));int s1 = getElem(L1,3);printf("L1第3个位置:%c\n",L1[s1].data);int s2 = getElem(L2,4);printf("L2第4个位置:%c\n",L2[s2].data);s1 = locateElem(L1,'e');s2 = locateElem(L2,'p');printf("s1 = locateElem(L1,'e'):%c\n",L1[s1].data);printf("s2 = locateElem(L2,'p'):%c\n",L2[s2].data);listInsert(L1,2,'z');printf("listInsert(&L1,2,'z') :");printList(L1);char e;listDelete(L2,3,&e);printf("listDelete(&L2,3,&e) : %c\n",e);printList(L2);if(emptyList(L1)){printf("L1为空\n");}else{printf("L1不为空\n");}if(emptyList(L2)){printf("L2为空\n");}else{printf("L2不为空\n");}printf("L1长度:%d\nL2长度:%d\n",lengthList(L1),lengthList(L2));destroyList(L2);printf("L2\n");return 0;}

in.txt:

abcepoui
apple


0 0
原创粉丝点击