10.6静态链表

来源:互联网 发布:福昕pdf编辑器for mac 编辑:程序博客网 时间:2024/06/06 09:03
//10.6 静态链表#include <stdio.h>#include <stdlib.h>#define MAXSIZE 30typedef struct{char data;                  //data 为节点的数信息int cursor;                 //cursor 标识直接后继节点}SNode;                         //静态链表节点类型void InsertList(SNode L[], int i, char x)  //在静态链表中插入元素{int j, j1, j2, k;j = L[0].cursor;                       //j 指向第一个数据节点if (1 == i){if (0 == j)                        //静态链表为空{L[1].data = x;                 //将小放入节点L[1]中L[0].cursor = 1;               //头指针cursor 指向这个新插入的节点L[1].cursor = 0;               //置链尾标志}else{k = j + 1;while (k != j)                 //在数组中循环查找存放x 的位置{if (L[k].cursor == -1)     //找到空位置{break;}else{k = (k + 1) % MAXSIZE;  //否则查找下一个位置}}if (k != j)                     //在数组中找到一个空位置来存放x{L[k].data = x;L[k].cursor = L[0].cursor;  //将其插入到静态链表表头L[0].cursor = k;}else{printf("List overflow!\n"); //链表已满无法插入}}}else                                    //i != 1 不是作为第一个节点插入{k = 0;while (k < i - 2 && j != 0)         //查找第i-1 个节点, j 不等于0 则表示{k++;j = L[j].cursor;}if (0 == j)        //查完整个静态链表未找到第i-1 个节点,即链表长度小于i-1 个节点{printf("Insert error\n");}else{j1 = j;                         //找到第i-1 个节点j2 = L[j].cursor;     //用j2 保存原L[j].cursor 值,此值为第i个节点的位置值k = j + 1;while (k != j)                  //在数组中循环查找存放x 的位置{if (L[k].cursor == -1)      //找到空位置{break;}else{k = (k + 1) % MAXSIZE;  //否则查找下一个位置}}if (k != j)                     //在数组中找到一个空位置来存放x{L[k].data = x;L[j1].cursor = k;           //作为第i 个节点链入倒静态链表L[k].cursor = j2;           //新节点之后再链接上原第i 个节点}else{printf("List overflow!\n"); //链表已满,无法插入}}}}void print(SNode *L){int i;i = L[0].cursor;                        //从静态链表的表头元素开始输出while (i != 0){printf("%c ", L[i].data);i = L[i].cursor;}printf("\n");}int main(){SNode L[MAXSIZE];int i;char x;for (i = 1; i < MAXSIZE; i++)           //静态链表初始化{L[i].cursor = -1;}L[0].cursor = 0;                        //静态链表初始为空标志(0 为链尾)i = 1;printf("Input element of llist\n");     //建立静态链表scanf("%c", &x);while (x != '\n'){InsertList(L, i, x);i++;scanf("%c", &x);}printf("Input site and element of insert\n");scanf("%d %c", &i, &x);                 //输入要插入元素的位置InsertList(L, i, x);                    //在静态链表中插入元素printf("Output list\n");print(L);                                //输出静态链表return 0;}

 
原创粉丝点击