用C语言建立一个顺序存储的线性表并实现线性表的插入和删除操作
1个回答
展开全部
此顺序表实现了多个功能,代码很完善,我将其改成从键盘输入跟选择删除了,你根据你的需要自己再进行修改。
//common.h文件,头文件
#ifndef _COMMON_H_
#define _COMMON_H_
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <assert.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype data[MAXSIZE];
int length;
}sqnode, *sqlink;
void creat_sqlist(sqlink *sq);
void set_empty_sqlist(sqlink sq);
int isempty_sqlist(sqlink sq);
int isfull_sqlist(sqlink sq);
int getlength_sqlist(sqlink sq);
datatype getelem(sqlink sq,int i);//i 为第i个元素
int locate_sqlist(sqlink sq, datatype x);//返回该元素在表中的位置
void insert_sqlist(sqlink sq, datatype x, int i);//表示在表中第i个位置前插入。
datatype del_sqlist(sqlink sq, int i);//删除表中第i个元素
void show_sqlist(sqlink sq);
#endif
//线性表实现的c代码
#include "common.h"
void creat_sqlist(sqlink *sq)
{
*sq = (sqlink)malloc(sizeof(sqnode));
assert(*sq);
bzero(*sq, sizeof(sqnode));
(*sq)->length = 0;
}
void set_empty_sqlist(sqlink sq)
{
sq->length = 0;
}
int isempty_sqlist(sqlink sq)
{
return sq->length == 0 ? TRUE : FALSE;
}
int isfull_sqlist(sqlink sq)
{
return sq->length == MAXSIZE ? TRUE : FALSE;
}
int getlength_sqlist(sqlink sq)
{
return sq->length;
}
datatype getelem(sqlink sq, int i)//i为第i个元素
{
if(i<1 || i>getlength_sqlist(sq))
{
printf("i is wrong!\n");
return FALSE;
}
return sq->data[i-1];
}
int locate_sqlist(sqlink sq, datatype x)//返回该元素在表中的位置
{
int j = 1;
while(j <= getlength_sqlist(sq))
{
if(sq->data[j-1] == x)
return j;
j++;
}
return FALSE;
}
void insert_sqlist(sqlink sq, datatype x, int i)//表示在表中第i个位置前插入。
{
int j = 1;
if(isfull_sqlist(sq))
{
printf("sqlist is full!\n");
return;
}
if(i<1 || i>getlength_sqlist(sq)+1)
{
printf("i is not in the range!\n");
return;
}
for(j = getlength_sqlist(sq)-1; j>=i-1; j--)
{
sq->data[j+1] = sq->data[j];
}
sq->data[i-1] = x;
++sq->length;
}
datatype del_sqlist(sqlink sq, int i)//删除表中第i个元素
{
datatype ret;
if(isempty_sqlist(sq))
{
printf("sqlist is empty!\n");
return FALSE;
}
if(i<1 || i>getlength_sqlist(sq))
{
printf("i is not in the range!");
return FALSE;
}
for(i; i<getlength_sqlist(sq); i++)
sq->data[i-1] = sq->data[i];
--sq->length;
return ret;
}
void show_sqlist(sqlink sq)
{
int j = 0;
for(j; j<getlength_sqlist(sq); j++)
printf("%d,",sq->data[j]);
putchar('\n');
}
//main函数
#include "common.h"
int main (int argc, char *argv[])
{
int i = 0, n, id;
int num;
printf("你要往顺序表中插入几个元素\n");
scanf("%d", &num);
printf("请往顺序表中插入%d个元素:\n", num);
sqlink sq = NULL;
creat_sqlist(&sq);
while(i < num)
{
scanf("%d", &n);
insert_sqlist(sq, n, 1);
i++;
}
printf("顺序表的存储如下:\n");
show_sqlist(sq);
printf("你要删除第几个元素?\n");
scanf("%d", &id);
del_sqlist(sq, id);
printf("删除第%d个元素之后的顺序表为:\n", id);
show_sqlist(sq);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询