您的位置:首页 > 理论基础 > 数据结构算法

数据结构——顺序表的几个重要方法的C语言实现

2017-09-18 22:36 627 查看
//数据结构:顺序表
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define INITSIZE 100
#define ADDSIZE 10

typedef struct SqList{
int *addr;
int length;
int size;
}SqList;

void initList(SqList &x){
x.addr=(int*)malloc(sizeof(int)*INITSIZE);
if(!x.addr)
exit(0);
x.length=0;
x.size=INITSIZE;
}//初始化顺序表

//删除顺序表
int deleteList(SqList &x){
if(!x.addr)
return 1;
free(x.addr);
return 0;
}

int insertNode(SqList &x,int i,int e){
//排除i不合法的情况
if(i<0||i>x.length)
return 1;
//排除超出表容量的情况
if(x.length==x.size){
int *newAddr=(int*)realloc(x.addr,sizeof(int)*(x.size+ADDSIZE));
if(!newAddr)
exit(0);
x.addr=newAddr;
}
//插入元素
for(int j=x.length-1;j>i-1;j--)
x.addr[j+1]=x.addr[j];
x.addr[i]=e;
x.length++;

return 0;
}//在第i个元素后面插入一个元素e

int deleteNode(SqList &x,int i){
//排除i不合法的情况
if(i<0||i>x.length)
return 1;
//删除
for(int j=i;j<x.length;j++)
x.addr[j-1]=x.addr[j];
x.length--;

return 0;
}//删除第i个元素后面的元素

//输出顺序表
void outputList(SqList &x){
for(int i=0;i<x.length;i++)
printf("%3d",x.addr[i]);
printf("\n");
}

int main(){

SqList newList;
initList(newList);

int m=0;
printf("请按顺序输入要插入链表的元素(10个):");
for(int i=0;i<10;i++){
scanf("%d",&m);
insertNode(newList,i,m);
}

outputList(newList);

printf("请输入要删除第几个元素:");
scanf("%d",&m);
deleteNode(newList,m);

outputList(newList);

deleteList(newList);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: