C语言实现动态顺序表
来源:互联网 发布:java重要知识点 编辑:程序博客网 时间:2024/06/05 06:52
头文件
#include<string.h>#include<assert.h>#include<stdio.h>#include<stdlib.h>#ifndef _LIST_H__#define _LIST_H__#define DEFAULT 3//初始化开辟容量大小#define INT_SZ 2//每次固定增容大小typedef int DataType;typedef struct SeqList{ DataType *pData; int count;//有效元素个数 int capacity;//容量大小}SeqList, *pList;void InItSeqList(pList p);//初始化void PushBack(pList p, DataType data);//尾插void PushFront(pList p, DataType data);//头插void PopBack(pList p);//尾删void PopFront(pList p);//头删void Remove(pList p, DataType data);//删除指定元素void RemoveAll(pList p, DataType data);//删除指定所有元素void BubbleSort(pList p);//排序int Search(pList p, DataType data);//查找void Show(pList p);//全部显示int BinarySearch(pList p, DataType d);//二分查找void Destory(pList p);//销毁顺序表#endif // LIST_H__
测试文件
#define _CRT_SECURE_NO_WARNINGS 1#include"list.h"void menu(){ printf("*******1.PushBack-尾插 2.PushFront-头插*******\n"); printf("*******3.PopBack-尾删 4.PopFront-头删********\n"); printf("*******5.Search-查找 6.Remove-删除指定元素**\n"); printf("*******7.RemoveAll-删除指定所有元素 8.BubbleSort-排序******\n"); printf("*******9.Show-显示顺序表 10.BinarySearch-二分查找*\n"); printf("******* **************** 0.Destory***************\n");}int main(){ SeqList mylist; int input = 0; int data = 0; InItSeqList(&mylist); do { menu(); printf("请选择需要的操作:\n"); scanf("%d", &input); switch (input) { case 1: printf("请输入要插入的元素:"); scanf("%d", &data); PushBack(&mylist, data); break; case 2: printf("请输入要插入的元素:"); scanf("%d", &data); PushFront(&mylist, data); break; case 3: PopBack(&mylist);//尾删 break; case 4: PopFront(&mylist);//头删 break; case 5: { int Ret = 0; printf("请输入要查找的元素:"); scanf("%d", &data); Ret = Search(&mylist, data); if (Ret == -1) { printf("查找的元素不存在"); } else { printf("查找的元素下标为%d\n", Ret); } } break; case 6: printf("请输入要删除的元素:"); scanf("%d", &data); Remove(&mylist, data); break; case 7: printf("请输入要删除的元素:"); scanf("%d", &data); RemoveAll(&mylist, data); break; case 8: BubbleSort(&mylist); break; case 9: Show(&mylist); break; case 10: printf("请输入要查找的元素:"); scanf("%d", &data); BinarySearch(&mylist, data); case 0: Destory(&mylist); defult: break; } } while (input); system("pause"); return 0;}
具体函数实现
#define _CRT_SECURE_NO_WARNINGS 1#include"list.h"void InItSeqList(pList p)//初始化顺序表{ assert(p); DataType* tmp = (DataType*)malloc(sizeof(DataType)*DEFAULT); if (tmp == NULL) { perror("malloc"); return; } else { p->pData = tmp; p->count = 0; p->capacity = DEFAULT; memset(p->pData, 0, sizeof(DataType)*DEFAULT); }}DataType* CheckCapacity(pList p){ if (p->count==p->capacity) { DataType* tmp = (DataType*)realloc(p->pData, sizeof(DataType)*(p->capacity + INT_SZ)); if (tmp == NULL) { return; } else { p->pData = tmp; p->capacity += INT_SZ; } } }void PushBack(pList p, DataType data)//尾插{ assert(p != NULL); CheckCapacity(p); p->pData[p->count] = data; p->count++;}void PopBack(pList p)//尾删{ if (p != NULL) { p->count--; } else { return; }}void PushFront(pList p, DataType data)//头插{ int i = 0; assert(p != NULL); CheckCapacity(p); for (i = p->count; i >0; i--) { p->pData[i] = p->pData[i - 1]; } p->pData[0] = data; p->count++;}void PopFront(pList p)//头删{ int i = 0; assert(p != NULL); if (p->count == 0) { printf("顺序表为空\n"); } else { for (i = 0; i < p->count - 1; i++) { p->pData[i] = p->pData[i + 1]; /*p->count--;*/ } p->count--; }}void Show(pList p)//显示{ int i = 0; assert(p != NULL); for (i = 0; i < p->count; i++) { printf("%d\n", p->pData[i]); }}int Search(pList p, DataType d)//查找{ int i = 0; assert(p != NULL); for (i = 0; i < p->count; i++) { if (p->pData[i] == d) { return i; } else { return -1; } }}void Remove(pList p, DataType d)//删除指定元素{ int i = 0; int pos = 0; assert(p != NULL); if (pos = Search(p, d) != -1) { for (i = pos; i < p->count - 1; i++) { p->pData[i] = p->pData[i + 1]; } p->count--; } else { printf("找不到需要删除的元素\n"); return; }}void RemoveAll(pList p, DataType d)//删除指定所有元素{ int i = 0; int pos = 0; assert(p != NULL); while ((pos = Search(p, d)) != -1) { for (i = pos; i < p->count - 1; i++) { p->pData[i] = p->pData[i + 1]; } p->count--; }}void BubbleSort(pList p)//排序{ int i = 0; int j = 0; assert(p != NULL); for (i = 0; i < p->count - 1; i++) { for (j = 0; j < p->count - 1 - i; j++) { if (p->pData[j]>p->pData[j + 1]) { DataType tmp = p->pData[j]; p->pData[j] = p->pData[j + 1]; p->pData[j + 1] = tmp; } } }}int BinarySearch(pList p, DataType d){ int left = 0; int right = p->count - 1; while (left <= right) { int mid = (left - (left - right)) >> 1; if (p->pData[mid] > d) { right = mid - 1; } else if (p->pData[mid] < d) { left = mid + 1; } else { return mid; } }}void Destory(pList p){ assert(p); free(p->pData); p->pData = NULL;}
0 0
- C语言实现动态顺序表
- c语言实现动态顺序表
- 利用C语言实现动态顺序表
- C语言实现动态顺序表
- c语言顺序表动态实现
- 动态顺序表----C语言实现
- C语言实现动态顺序表
- C语言动态顺序表的实现
- C语言实现动态顺序表
- C语言实现动态顺序表
- 动态顺序表(C语言实现)
- C语言实现动态顺序表
- c语言动态顺序表的实现
- C语言简单实现动态顺序表
- 【C语言】动态顺序表的实现
- 动态顺序表-c语言实现
- 【C语言】实现动态顺序表
- C语言实现动态顺序表
- JDBC连接数据库
- 软(符号)连接和硬连接
- Xlib: connection to ":0.0" refused by server Xlib: No protocol specified
- mongodb错误
- Linux第七课总结
- C语言实现动态顺序表
- 死锁和四个必要条件
- XMAPP和Hush FrameWork环境配置
- SELINUX的管理
- jQuery中的遍历节点(作用与选择器类似)
- 银行家算法
- ViewPager的翻页动画
- 在Domoticz中添加彩云天气python插件
- Java Cloneable接口与Serializable接口实现对象克隆和深度克隆