直接上干货:
一、实验目的
1、掌握线性表中元素的前驱、后继的概念。
2、掌握顺序表的建立、插入元素、删除表中某元素的算法。
3、对线性表相应算法的时间复杂度进行分析。
二、实验要求
1.实验前做好充分准备,包括复习第一章、第二章所学内容,事先预习好本次实验内容。
2.实验时记录实验结果,按要求完成各题。
3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验内容
1. 完成并实现如下顺序表的基本操作。要求:编写测试函数运行程序,给出结果每个基本操作的运行截图。
(1)顺序表的定义
#include <stdio.h> #include <malloc.h> #include <assert.h> #define InitSize 8 /*初始分配的顺序表长度*/ #define IncrSize 4 /*溢出时,顺序表长度的增量*/ typedef int ElemType; typedef struct SeqList //动态方式定义顺序表存储结构 { ElemType *data; /*存储空间的基地址*/ int length; /*线性表中有效元素的长度*/ int capacity; //顺序表的容量 }SeqList; |
(2)顺序表的基本操作:
void InitSeqList(SeqList *list);//初始化顺序表
代码:
void InitSeqList(SeqList *list) { list->data = (ElemType*)malloc(sizeof(ElemType)* InitSize); list->length = 0; list->capacity = InitSize; } |
Int IncSeqList(SeqList *list);// 为顺序表增加存储空间
代码:
int IncSeqList(SeqList *list) { list->capacity *=IncrSize; ElemType *p = malloc(sizeof(ElemType)* list->capacity); for(int i = 0; i < list->length; i++) { p[i] = list->data[i]; } free(list->data); list->data = p; } |
void push_front(SeqList *list,ElemType x);//顺序表前端插入数据
代码:
void push_front(SeqList *list,ElemType x) { if(list->length <= list->capacity) IncSeqList(list); list->length++; for(int i = list->length-2;i>0;i--) { list->data[i+1] = list->data[i]; } list->data[0] = x; } |
运行截图:
|
void push_back(SeqList *list,ElemType x);//顺序表后端插入数据
代码:
void push_back(SeqList *list,ElemType x) { if(list->length <= list->capacity) IncSeqList(list); list->length++; list->data[list->length] = x; } |
运行截图:
|
void ShowSeqList(SeqList *list);//显示数据
代码:
void ShowSeqList(SeqList *list) { for(int i=0;i < list->length;i++) printf("%d",list->data[i]); } |
运行截图:
|
int Length(SeqList *list);//求顺序表长度
代码:
int Length(SeqList *list) { return list->length; } |
运行截图:
|
void pop_front(SeqList *list);//前端删除元素
代码:
void pop_front(SeqList *list) { for(int i=0;i<list->length-1;i++) { list->data[i] = list->data[i+1]; } list->length--; } |
运行截图:
|
void pop_back(SeqList *list);//后端删除元素
代码:
void pop_back(SeqList *list) { list->length--; } |
运行截图:
|
void InsertSeqList_pos(SeqList *list,int pos,ElemType key);//在顺序表中按照pos位置插入数据元素key
代码:
void InsertSeqList_pos(SeqList *list,int pos,ElemType key) { if(pos < 1||pos>list->length) { return; } if(list->length>= list->capacity) IncSeqList(list); list->length++; for(int i = list->length;i >=pos;i--) { list->data[i]= list->data[i-1]; } list->data[pos] = key; } |
运行截图:
|
void DeleteSeqList_pos(SeqList *list,int pos);//在顺序表中按照pos位置删除数据元素
代码:
void DeleteSeqList_pos(SeqList *list,int pos) { for(int i = pos-1;i< list->length-1;i++) { list->data[i] = list->data[i+1]; } list->length--; } |
运行截图:
|
int findSeqList_val(SeqList *list,ElemType key);/*在顺序表中查找值为key的元素位置*/
代码:
int findSeqList_val(SeqList *list,ElemType key) { for(int i=0;i<list->length; i++) { if(list->data[i]==key) return i+1; } return 0; } |
运行截图:
|
void sortSeqList(SeqList *list);//排序
代码:
void sortSeqList(SeqList *list) { for(int i =0;i<list->length;i++) { for(int j= list->length-1; j >i;j--) { if(list->data[j]<list->data[i-1]) { ElemType temp = list->data[j]; list->data[j] = list->data[j-1]; list->data[j-1] = temp; } } } } |
运行截图:
|
void reverseList(SeqList *list);//逆置
代码:
void reverseList(SeqList *list) { for(int i=0;i <list->length/2;i++) { ElemType temp = list->data[i]; list->data[i] = list->data[list->length-1-i]; list->data[list->length-i-1] = temp; } } |
运行截图:
|
void GetElem(SeqList *list,int pos,ElemType *elem);/*获取指定位置的元素,ingredients将元素存在elem所指空间的变量中*/
代码:
void GetElem(SeqList *list,int pos,ElemType *elem) { *elem = list->data[pos-1]; } |
运行截图:
|
void clearSeqList(SeqList *list);//清空顺序表
代码:
void clearSeqList(SeqList *list) { list->length = 0; } |
运行截图:
|
void DestroySeqList(SeqList *list);//销毁
代码:
void DestroySeqList(SeqList *list) { if(list->data !=NULL) free(list->data); list->length = 0; } |
运行截图:
|
#include <stdio.h>
#include <malloc.h>
#include <assert.h>
#define InitSize 8 /*鍒濆鍒嗛厤鐨勯『搴忚〃闀垮害*/
#define IncrSize 4 /*婧㈠嚭鏃讹紝椤哄簭琛ㄩ暱搴︾殑澧為噺*/
typedef int ElemType;
typedef struct SeqList //鍔ㄦ€佹柟寮忓畾涔夐『搴忚〃瀛樺偍缁撴瀯
{
ElemType *data; /*瀛樺偍绌洪棿鐨勫熀鍦板潃*/
int length; /*绾挎€ц〃涓湁鏁堝厓绱犵殑闀垮害*/
int capacity; //椤哄簭琛ㄧ殑瀹归噺
}SeqList;
void InitSeqList(SeqList *list);//鍒濆鍖栭『搴忚〃
bool IncSeqList(SeqList *list);// 涓洪『搴忚〃澧炲姞瀛樺偍绌洪棿
void push_front(SeqList *list,ElemType x);//椤哄簭琛ㄥ墠绔彃鍏ユ暟鎹?
void push_back(SeqList *list,ElemType x);//椤哄簭琛ㄥ悗绔彃鍏ユ暟鎹?
void ShowSeqList(SeqList *list);//鏄剧ず鏁版嵁
int Length(SeqList *list);//姹傞『搴忚〃闀垮害
void pop_front(SeqList *list);//鍓嶇鍒犻櫎鍏冪礌
void pop_back(SeqList *list);//鍚庣鍒犻櫎鍏冪礌
void InsertSeqList_pos(SeqList *list,int pos,ElemType key);//鍦ㄩ『搴忚〃涓寜鐓os浣嶇疆鎻掑叆鏁版嵁鍏冪礌key
void DeleteSeqList_pos(SeqList *list,int pos);//鍦ㄩ『搴忚〃涓寜鐓os浣嶇疆鍒犻櫎鏁版嵁鍏冪礌
int findSeqList_val(SeqList *list,ElemType key);/*鍦ㄩ『搴忚〃涓煡鎵惧€间负key鐨勫厓绱犱綅缃?/
void sortSeqList(SeqList *list);//鎺掑簭
void reverseList(SeqList *list);//閫嗙疆
void GetElem(SeqList *list,int pos,ElemType *elem);/*鑾峰彇鎸囧畾浣嶇疆鐨勫厓绱狅紝ingredients灏嗗厓绱犲瓨鍦╡lem鎵€鎸囩┖闂寸殑鍙橀噺涓?/
void clearSeqList(SeqList *list);//娓呯┖椤哄簭琛紱
void DestroySeqList(SeqList *list);//閿€姣?
#include "SeqList.h"
void InitSeqList(SeqList *list)
{
}
bool IncSeqList(SeqList *list)
{
}
void push_front(SeqList *list,ElemType x)
{
}
void push_back(SeqList *list,ElemType x)
{
}
void ShowSeqList(SeqList *list)
{
}
int Length(SeqList *list)
{
}
void pop_front(SeqList *list)
{
}
void pop_back(SeqList *list)
{
}
void InsertSeqList_pos(SeqList *list,int pos,ElemType key)
{
}
void DeleteSeqList_pos(SeqList *list,int pos)
{
}
int findSeqList_val(SeqList *list,ElemType key)
{
}
void sortSeqList(SeqList *list)
{
}
void reverseList(SeqList *list)
{
}
void GetElem(SeqList *list,int pos,ElemType *elem)
{
}
void clearSeqList(SeqList *list)
{
}
void DestroySeqList(SeqList *list)
{
}