静态顺序表的c实现
来源:互联网 发布:主人网络怎么开启 编辑:程序博客网 时间:2024/06/04 00:44
#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <memory.h>#define MAXSIZE 50#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;//定义顺序表的静态数组表示typedef struct{ElemType data[MAXSIZE];int length;}SqList,*pSqList;void Init_Sq(pSqList pSq);void InsertFirst(pSqList pSq, ElemType);void InsertLast(pSqList pSq, ElemType);void TraverseList(pSqList pSq);int ListLength(pSqList pSq);Status ListInsert(pSqList pSq, int i, ElemType e);Status ListDelete(pSqList pSq, int i, ElemType * e);int LocateElem_Sq(pSqList pSq, ElemType e);void GetElem(pSqList pSq, int i, ElemType * e);void Union_Sq(pSqList La, SqList Lb);int main(){ SqList list1; Init_Sq(&list1); int length1; scanf("%d",&length1); int i; ElemType e; for(i=0;i<length1;i++) { scanf("%d",&e); InsertLast(&list1, e); } printf("创建好的线性表list1="); TraverseList(&list1); printf("像表头插入一个元素:"); scanf("%d",&e); InsertFirst(&list1, e); printf("插入一个头元素的list1="); TraverseList(&list1); printf("在线性表第i个位置前插入e,输入i(输q退出):"); while(scanf("%d", &i)) { printf("输入元素e:"); scanf("%d", &e); ListInsert(&list1, i, e); printf("在线性表第i个位置前插入e,输入i(输q退出):"); } printf("插入元素后的list1:"); TraverseList(&list1); getchar(); printf("在顺序表中删除list1中删除第i个元素,输入i(输q退出):"); while(scanf("%d", &i)) { int e; ListDelete(&list1, i, &e); printf("删除的元素是:%d\n", e); printf("在顺序表中删除list1中删除第i个元素,输入i(输q退出):"); } printf("删除元素后的list1:"); TraverseList(&list1); getchar(); printf("\n"); SqList list2; Init_Sq(&list2); int length2; scanf("%d", &length2); for(i=0;i<length2;i++) { scanf("%d",&e); InsertLast(&list2, e); } printf("创建好的线性表list2="); TraverseList(&list2); Union_Sq(&list1, list2); printf("list1 U list1 ="); TraverseList(&list1); return 0;}//初始化顺序表void Init_Sq(pSqList pSq){ assert(pSq); //判断是否开辟结构体空间//把线性表的每个元素初始化为0//方法1// memset(pSq->data, 0, sizeof(ElemType)*MaxSize);//方法2// for(i=0; i<sizeof(pSq->data)/sizeof(*pSq->data); i++)// {// pSq->data[i] = 0;// } pSq->length = 0;}//遍历顺序表void TraverseList(pSqList pSq){ int i; for(i=0; i<pSq->length; i++) { printf("%d", pSq->data[i]); } putchar('\n'); return;}//求表中元素个数int ListLength(pSqList pSq){ return pSq->length;}//向表头插入一个元素void InsertFirst(pSqList pSq, ElemType e){ int * p, * q; if(pSq->length>=MAXSIZE) { exit(OVERFLOW); } q = &pSq->data[0]; for(p=&pSq->data[pSq->length-1];p>=q;p--) //不能用于首次插入 { *(p + 1) = *p; } *q = e; pSq->length++; return;}//向表尾插入一个元素void InsertLast(pSqList pSq, ElemType e){ if(pSq->length>=MAXSIZE) { exit(OVERFLOW); } pSq->data[pSq->length] = e; pSq->length++; return;}//在顺序表第i个位置之前插入新的元素eStatus ListInsert(pSqList pSq, int i, ElemType e){ int * q, * p; if(i<1 || i>pSq->length+1) return ERROR; if(pSq->length>=MAXSIZE) { exit(OVERFLOW); } q = &(pSq->data[i-1]); for(p=&(pSq->data[pSq->length-1]);p>=q;p--) * (p+1) = * p; * q = e; ++pSq->length; return OK;}//删除第i个元素,并返回其值Status ListDelete(pSqList pSq, int i, ElemType * e){ int * p, *q; if((i<1) || (i>pSq->length)) return ERROR; p = &(pSq->data[i-1]); *e = *p; q = pSq->data + pSq->length-1; for(++p; p<=q; ++p) *(p-1) = *p; --pSq->length; return OK;}//定位一个指定的值在线性表中的具体位置//若找到,则返回其在顺序表中的位序int LocateElem_Sq(pSqList pSq, ElemType e){ ElemType * p; int i = 1; p = pSq->data; while(i<=pSq->length&&!(*p++==e)) i++; if(i<=pSq->length) return i; else return 0;}void GetElem(pSqList pSq, int i, ElemType* e){ *e = pSq->data[i-1];}//求线性表La与线性表Lb的并集,//即将所有在线性表Lb中但不在线性表La中的元素插入到La中void Union_Sq(pSqList La, SqList Lb){ int Lb_len; Lb_len = ListLength(&Lb); int i; for(i=1; i<=Lb_len;i++){ int e; GetElem(&Lb, i, &e); if(!LocateElem_Sq(La, e)){ InsertLast(La, e); } }}
希望,下次用二分查找实现线性表具有集合属性。
阅读全文
0 0
- C::静态顺序表的实现
- C语言静态顺序表的实现
- 静态顺序表的c实现
- 静态顺序表的C语言实现
- 静态和动态顺序表的实现(c语言)
- C语言 顺序表的实现(静态)
- 静态与动态顺序表操作的C语言实现
- C语言:静态顺序表的实现和相关操作
- 顺序表的静态存储c语言实现
- 静态顺序表的实现(C语言版)
- 静态顺序表的实现(C语言)
- c语言静态顺序表的相关功能实现
- 线性表的顺序静态存储--C语言实现
- 静态顺序表用C实现的各种操作
- 静态顺序表的实现
- 静态顺序表的实现
- 静态顺序表的实现
- 静态顺序表的实现
- 3.1等待和通知API(Wait-and-Notify API Tour)
- 广度(宽度)优先搜索:队列
- Linux下socket套接字一些重要结构体
- 闹钟-通知完整版
- shijian
- 静态顺序表的c实现
- MFC 控件学习心得:
- 快速排序
- 京东暂停天天快递,消费者是最大的赢家
- /* Linux 终端基本命令*/
- 3.2生产者和消费者(Producers and Consumers)
- ASCII码排序
- NOI2017 最后的失败
- 平衡二叉树的实现