赞
踩
以下为本人大学期间某上机作业,分享给大家,如有不足欢迎指出!
目录
定义一个顺序的线性表,命名为Seq_List,实现如下操作:
序号 | 函数 | 功能 | 输入输出要求 |
| Length(L) | 求线性表长 | 输入——顺序表L 输出——顺序表表长(即表中元素个数) |
| Get(L,i) | 获取线性表第i个元素值 | 输入——顺序表L和位置i(1≤i≤n,n为表长) 输出——顺序表L中第i个元素的值 |
| Locate(L,x) | 在线性表中查找值为x的元素 | 输入——顺序表L和元素值x 输出——x在顺序表L中的位置,若不存在输出-1 |
| Insert(L,i,x) | 在线性表中第i个位置插入值为x的元素 | 输入——顺序表L,位置i和元素值x 输出——插入成功返回1,失败返回0 |
| Delete(L,i) | 在线性表中删除第i个元素 | 输入——顺序表L和位置i 输出——删除成功返回1,失败返回0 |
| IsEmpty(L) | 判断线性表是否为空表 | 输入——顺序表L 输出——顺序表L为空返回True,否则返回False |
| Traverse(L) | 遍历线性表L | 输入——顺序表L 输出——顺序表所有元素 |
- #include <stdio.h>
- #include <stdlib.h>
- #define MAXSIZE 100
-
- typedef int ElemType;
-
- typedef struct{
- ElemType data[MAXSIZE];
- int length;
- }Seq_List;
-
- Seq_List *InitList(Seq_List *L);// 0.初始化线性表,返回头指针
- int Length(Seq_List *L);// 1.求线性表长
- int Get(Seq_List *L, int i, ElemType *e);// 2.获取第i个元素
- int Locate(Seq_List *L, ElemType e);//3.定位值为e的位置
- int Insert(Seq_List *L, int i, ElemType e);//4. 插入元素
- int Delete(Seq_List *L, int i);// 5. 删除第i个元素
- int IsEmpty(Seq_List *L);// 6.判断线性表是否为空表
- int Traverse(Seq_List *L);//7. 遍历线性表
-
- // 0.初始化线性表,返回头指针
- Seq_List* InitList(Seq_List *L){
- int x;
- int index = 0;
-
- L = (Seq_List *)malloc(sizeof(Seq_List));
- if(L){
- printf("输入一组数字,到-1结束\n");
- while(1){
- scanf("%d", &x);
- if(x == -1){
- printf("初始化成功\n\n");
- break;
- };
- L->data[index++] = x;
- }
- L->length = index;
- }else{
- printf("空间不足,初始化失败\n\n");
- }
- return L;
- }
-
-
- //1. 返回线性表长度
- int Length(Seq_List *L){
- return L->length;
- }
-
- //2.获取第i个元素,返回是否获取的状态
- int Get(Seq_List *L, int i, ElemType *e){
- if(i<1 || i>L->length){
- printf("查找下标%d越界\n",i);
- return 0;
- }
- *e = L->data[i-1];
- printf("第%d个元素是%d\n", i, *e);
- return 1;
- }
- //3.返回第一个与e相同元素的位置,返回找寻到的下标
- int Locate(Seq_List *L, ElemType e){
- int i;
- for(i=0; i<L->length; i++){
- if(L->data[i] == e){
- return i+1;
- }
- }
- return -1;
- }
-
- //4.插入,返回是否插入成功的状态
- int Insert(Seq_List *L, int i, ElemType e){
- if(i<1 || i>L->length+1){
- printf("插入位置有误\n");
- return 0;
- }
- if(L->length == MAXSIZE){
- printf("线性表已满无法插入新元素\n");
- return 0;
- }
- int j;
- for(j=L->length-1; j>=i-1; j--){
- L->data[j+1] = L->data[j];
- }
- L->data[i-1] = e;
- L->length++;
- printf("插入成功\n");
- return 1;
- }
-
- //5. 删除第i个元素,返回是否删除成功的状态
- int Delete(Seq_List *L, int i){
- if(i<1 || i>L->length){
- printf("删除位置有误\n");
- return 0;
- }
- int j;
- for(j=i; j<L->length; j++){
- L->data[j-1] = L->data[j];
- }
- L->length--;
- printf("删除成功\n");
- return 1;
- }
-
- //6. 判断线性表是否为空表 1为空,0不为空
- int IsEmpty(Seq_List *L){
- return (L->length == 0);
- }
-
- //7. 遍历线性表
- int Traverse(Seq_List *L){
- if(L->length == 0){
- printf("空表\n");
- return 0;
- }
- if(L->length>MAXSIZE || L->length<-MAXSIZE){
- printf("线性表已被摧毁或未初始化\n");
- return 0;
- }
- int j;
- for(j=0; j<L->length; j++){
- printf("%d ", L->data[j]);
- }
- printf("\n");
- return 0;
- }
-
- int main(){
- ElemType e;
- Seq_List *L = NULL;
-
- L = InitList(L);// 0.初始化
- printf("1.顺序表表长:%d\n\n",Length(L));
-
- printf("2.获取线性表第i个元素值:\n");
- printf("请输入i的值:");
- int i;
- scanf("%d",&i);
- Get(L, i, &e);
- printf("\n");
-
- printf("3.在线性表中查找值为x的元素:\n");
- printf("请输入x:");
- int x_2;
- scanf("%d",&x_2);
- printf("%d的位置:%d\n\n",x_2,Locate(L, x_2));
-
- printf("4.在线性表中第i个位置插入值为x的元素:\n");
- printf("请输入i:");
- int i_2;
- scanf("%d",&i_2);
- printf("请输入x:");
- int x;
- scanf("%d",&x);
- Insert(L, i_2, x);
- Traverse(L);
- printf("\n");
-
- printf("5.在线性表中删除第i个元素:\n");
- printf("请输入i:");
- int i_3;
- scanf("%d",&i_3);
- Delete(L, i_3);
- Traverse(L);
- printf("\n");
-
- printf("6.顺序表是否为空表:");
- if(IsEmpty(L))
- printf("True\n");
- else
- printf("False\n");
- printf("\n");
- printf("7.遍历线性表L:");
- Traverse(L);
-
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
定义一个链式的线性表,命名为Link_List,实现如下操作:
序号 | 函数 | 功能 | 输入输出要求 |
| Length(L) | 求线性表长 | 输入——线性链表L 输出——线性链表表长(即表中元素个数) |
| Get(L,i) | 获取线性表第i个元素值 | 输入——线性链表L和位置i(1≤i≤n,n为表长) 输出——线性链表L中第i个元素的值 |
| Locate(L,x) | 在线性表中查找值为x的元素 | 输入——线性链表L和元素值x 输出——x在线性链表L中的地址,若不存在输出NULL |
| Insert(L,i,x) | 在线性表中第i个位置插入值为x的元素 | 输入——线性链表L,位置i和元素值x 输出——插入成功返回1,失败返回0 |
| Delete(L,i) | 在线性表中删除第i个元素 | 输入——线性链表L和位置i 输出——删除成功返回1,失败返回0 |
| IsEmpty(L) | 判断线性表是否为空表 | 输入——线性链表L 输出——线性链表L为空返回True,否则返回False |
| Traverse(L) | 遍历线性表L | 输入——线性链表L 输出——线性链表所有元素 |
- #include<stdio.h>
- #include<malloc.h>
- typedef int datatype;
-
- typedef struct node
- {
- datatype data;
- struct node* next;
- }LNode,*Linklist;
-
- LNode* create_LinkList()//创建链表
- {
- int data;
- LNode* head, * p, * q;
- head = p = (LNode*)malloc(sizeof(LNode));
- scanf_s("%d", &head->data);
- p->next = NULL;
- while (1)
- {
- scanf_s("%d", &data);
- q = (LNode*)malloc(sizeof(LNode));
- q -> data = data;
- q -> next = NULL;
- p -> next = q;
- p = q;
- if (data == 0)
- {
- break;
- }
- }
- return head;
- }
-
- void length(LNode* L)//判断长度
- {
- int i = 0;
- while (L->next != NULL)
- {
- i++;
- L = L->next;
- }
- printf("单链表长度:%d\n", i);
- }
-
- void get(LNode* L, int i)//查找第i位元素值
- {
- printf("第 i 个元素值: ");
- for (int j = 1;j < i;j++)
- {
- L = L->next;
- }
- printf("%d\n", L->data);
- }
-
- void locate (LNode* L, int x)//寻找等于x的元素
- {
- int i = 1;
- printf("值为x的元素的位置为:");
- while (L->next != NULL)
- {
- if (L->data == x)
- {
- printf("%d\n", i);
- break;
- }
- i++;
- L = L->next;
- }
- }
-
- void insert(LNode* L, int i, int x)//插入元素
- {
- LNode* p;
- p = (LNode*)malloc(sizeof(LNode));
- p->data = x;
- for (int j = 1;j < i-1;j++)
- {
- L = L->next;
- }
- p->next = L->next;
- L->next = p;
- printf("插入成功\n");
- }
-
- void delete(LNode* L, int i)//删除元素
- {
- for (int j = 1;j < i - 1;j++)
- L = L->next;
- L->next = (L->next)->next;
- printf("删除成功\n");
- }
-
- void isempty(LNode* L)//判断空表
- {
- if (L->data == 0)
- printf("是空表\n");
- else
- printf("不是空表\n");
- }
-
- void Traverse(LNode* L)//遍历
- {
- while (L->next != NULL)
- {
- if ((L->next)->next == NULL)
- {
- printf("%d\n", L->data);
- break;
- }
- printf("%d->", L->data);
- L = L->next;
- }
- }
-
- int main()
- {
- LNode* L;
- int i, x, h, w, a;
- L=create_LinkList();
- printf("此时单链表各元素值如下:\n");
- Traverse(L);
- length(L);
- printf("需要获取的元素序号i=");
- scanf_s("%d", &i);
- get(L, i);
- printf("需要查找的元素值x=");
- scanf_s("%d", &x);
- locate(L, x);
- printf("插入位置h=");
- scanf_s("%d", &h);
- printf("插入元素w=");
- scanf_s("%d", &w);
- insert(L,h,w);
- Traverse(L);
- printf("删除的元素的位置a=");
- scanf_s("%d", &a);
- delete(L,a);
- Traverse(L);
- printf("判断线性表是否为空表:");
- isempty(L);
- Traverse(L);
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
如有帮助可以点个赞嘛…谢谢啦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。