顺序表的静态分配:
#include<iostream>
#include<stdio.h>
#define ElemType int
using namespace std;
//顺序表的静态分配
struct SqList
{
ElemType data[MaxSize];
int length;
}sqList;//传统的定义,这里没有typedef,sqList就是SqList类型的变量
void InitSqList(SqList L){
L.length = 0;
}
int Length(SqList L){
return L.length;
}
//按值查找
int LocaleElem(SqList L,ElemType e){
int i = L.length;
while(i--){
if(L.data[i] == e){
return i+1;
break;
}
}
if(i==0) return -1;
}
//按值查找n+1/2
ElemType GetElem(SqList L,int i){
if(i<0||i>L.length+1)
return -1;
return L.data[i-1];
}
//结构赋值
void ElemValue(SqList &L,int n)
{
int i,a;
for (i = 0; i <n; i++){
scanf("%d",&a);
L.data[i] = a;
L.length++;//长度随赋值情况增加
}
}
//输出表里的值
void PrintElem(SqList L){
printf("存储的数据如下:\n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
}
//线性表判空
bool Empty(SqList L){
if(L.length == 0)
return true;
else
return false;
}
//插入平均次数n+1/2
bool SqListInsert(SqList &L,int i,ElemType e){
if(i<0||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length;j>=i;j--)
L.data[j] = L.data[j-1];
L.data[i] = e;
L.length++;
return true;
}
//删除
bool SqListDelete(SqList &L,int i,ElemType &e){
if(i<0||i>L.length+1)
return false;
else{
e = L.data[i-1];
for(int j=i-1;j<=L.length;j++){
L.data[j] = L.data[j+1];
}
L.length--;
return true;
}
}
int main(){
int n;
InitSqList(sqList);
printf("给顺序表赋值:\n");
scanf("%d",&n);
ElemValue(sqList,n);
PrintElem(sqList);
printf("%d",SqListInsert(sqList,0,5));
return 0;
}
顺序表的动态分配:
#include <iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#define InitSize 10
//定义动态分配的顺序表结构
typedef struct SeqList
{
int *head;//类似于数组指针
int length;//已存储长度
int MaxSize;//表总长
}SeqList;
//初始化顺序表结构
SeqList InitSeqList()
{
SeqList t;
if ((t.head = (int *)malloc(InitSize*sizeof(int))) == NULL)
{
printf("申请存储空间失败!");
exit(1);
}
t.length = 0;//初始化长度为 0
t.MaxSize = InitSize;//结构大小
return t;
}
//结构赋值
SeqList CreatSeqList(SeqList t)
{
int i;
for (i = 0; i < t.MaxSize; i++)
{
t.head[i] = i + 1;
t.length++;//长度随赋值情况增加
}
return t;
}
//输出结构存储情况
SeqList Print(SeqList t)
{
printf("存储的数据如下:\n");
for (int i = 0; i < t.length; i++)
printf("%d ", t.head[i]);
printf("\n");
return t;
}
//插入数据
SeqList Insert(SeqList t,int elme,int add)
{
if (t.length == t.MaxSize)//如果数据结构已满,增加存储空间
t.head= (int *)realloc(t.head, (t.MaxSize + 1) * sizeof(int));
if (t.head == NULL)
{
printf("申请存储空间失败!\n");
exit(1);
}
else t.MaxSize++;//空间大小增加
int i = t.MaxSize;
for (; i >= elme-1; i--)//数据循环后移
t.head[i] = t.head[i - 1];
t.head[elme-1] = add;//指定位置插入数据,赋值
t.length++;//长度增加
return t;
}
//删除指定数据
bool Delete(SeqList &t, int elme)
{
int i = elme-1;
if(i<0||i>t.MaxSize-1)
return false;
for (; i <= t.MaxSize; i++)
t.head[i] = t.head[i+1];
t.head[i] = 0;
t.length--;
return true;
}
//查询指定数据,返回在数据结构中的位置
int Select(SeqList t, int elme)
{
int i;
for (i = 0; i <= t.length; i++)
{
if (t.head[i] == elme)
return i+1;
}
return -1;
}
//替换指定数据
SeqList Replace(SeqList t, int elme, int add)
{
int i=Select(t,elme);
t.head[i-1] = add;
return t;
}
//主函数
int main()
{
SeqList t = InitSeqList();
t = CreatSeqList(t);
t = Print(t);
int elme;
printf("请输入插入的位置:");
scanf("%d", &elme);
int add;
printf("请输入插入数据:");
scanf("%d", &add);
if (elme > t.MaxSize+1 || elme < 0)
{
printf("输入的位置错误\n");
exit(0);
}
t = Insert(t, elme,add);
t = Print(t);
printf("请输入删除的位置:");
scanf("%d", &elme);
if (elme > t.MaxSize || elme < 0)
{
printf("输入的位置错误\n");
exit(0);
}
Delete(t, elme);
t = Print(t);
printf("查找 5 的位置\n");
elme = Select(t, 5);
printf("5 的位置是 %d\n", elme);
t = Print(t);
printf("用 55 替换 5\n");
Replace(t, 5, 55);
t = Print(t);
system("pause");
return 0;
}