各种线性表的操作

来源:互联网 发布:ios wkwebview js弹窗 编辑:程序博客网 时间:2024/05/01 19:38
#include<stdio.h>#include<SeqList.h>void SplitSeqList(SeqList *L);void main(){int flag, i, n;DataType e;SeqList L;int a[] = { -7, 0, 5, -8, 9, -4, 3, -2 };InitList(&L);n = sizeof(a) / sizeof(a[0]);for (i = 1; i <= n; i++){if (InsertList(&L, i, a[i - 1]) == 0){printf("位置不合适!");return ;}}printf("顺序表L中元素:");for (i = 1; i <= L.length; i++){flag = GetElem(L, i, &e);if (flag == 1)printf("%4d", e);}printf("\n");printf("调整后的顺序表L为:");SplitSeqList(&L);for (i = 1; i <= L.length; i++){flag = GetElem(L, i, &e);if (flag == 1)printf("%4d", e);}printf("\n");}void SplitSeqList(SeqList *L){int i, j;DataType e;i = 0;j = L->length - 1;while (i < j){while (L->list[i] >= 0)i++;while (L->list[j] < 0)j++;if (i < j){e = L->list[i];L->list[i] = L->list[j];L->list[j] = e;}}}

/*SeqList.h*/#include "stdio.h"#include "math.h"#define LISTSIZE 100typedef int DataType;typedef struct {DataType list[LISTSIZE];int length;}SeqList;/******************************************************C 语言中结构体变量用         .   运算符来访问结构体的成员指向结构体的指针用   ->  来访问其指向的结构体的成员*******************************************************/// 1  初始化顺序表,将顺序表的长度置为0void InitList(SeqList *L) {L->length = 0;}// 2  判断顺序表是否为空,为空返回1,不空返回0int ListEmpty(SeqList L) {if (L.length == 0)return 1;elsereturn 0;}// 3  按序号查找操作int GetElem(SeqList L, int i, DataType *e){/*查找顺序表中第 i 个元素查找成功将该值返回给 e ,并返回 1 ;否则返回 -1 ,表示失败*/if (i<1 || i>L.length)   //查找之前判断序号是否合法return -1;*e = L.list[i - 1];      //将第 i 个元素赋值给 ereturn 1;}// 4  按内容查找操作int LocateElem(SeqList L, DataType e) {/*查找顺序表中元素值为 e 的元素查找成功,将对应元素的序号返回;否则返回0,表示失败*/int i;for (i = 1; i <= L.length; i++){if (L.list[i-1] == e)return i;           //返回的序号要搞清楚,从0开始}return 0;}// 5  插入操作/*插入                  i                  长度j序号  1   2   3   4   5   6   7   8   9   10list[i-1]            list[j-1]   list[j]list  0   1   2   3   4   5   6   7   8   9*/int InsertList(SeqList *L, int i, DataType e){/*在顺序表的第 i 个位置插入 元素 e ,插入成功返回 1;插入位置不和法,返回 -1;顺序表满返回  0 */int j;if (i<1 || i > L->length + 1){printf("插入位置不合法 !");return -1;}else if (L->length >= LISTSIZE){printf("顺序表已满不能插入 !");return 0;}else{for (j = L->length; j >= i; j--)L->list[j] = L->list[j - 1];L->list[i - 1] = e;          //插入元素到底 i 个位置 L->length = L->length + 1;              //顺序表长度 +1return 1;}}// 6 删除操作/*删除                   i                  长度j序号   1   2   3   4   5   6   7   8   9   10list[i-1]            list[j-1]list   0   1   2   3   4   5   6   7   8   9*/int DeleteList(SeqList *L, int i, DataType *e){int j;if (i<1 || i>L->length){printf("删除位置不合法!");return -1;}else if (L->length <= 0) {printf("顺序表已空,不能进行删除操作!");return 0;}else{*e = L->list[i - 1];          //删除的值保存到 e 中,以防要用for (j = i; j <= L->length - 1; j++)L->list[j - 1] = L->list[j];L->length = L->length - 1;return 1;}}// 7 获取长度int ListLength(SeqList L) {return L.length;}//清空操作void ClearList(SeqList *L) {L->length = 0;}//遍历输出void traversalList(SeqList L){int i,flag;DataType e;for (i = 1; i <= L.length; i++){flag = GetElem(L, i, &e);if (flag == 1)printf("%4d", e);}printf("\n");}

0 0
原创粉丝点击