用C语言建立一个顺序存储的线性表并实现线性表的插入和删除操作

线性表赋值要求采用键盘输入的方式进行赋值。要求完整,可直接运行。

此顺序表实现了多个功能,代码很完善,我将其改成从键盘输入跟选择删除了,你根据你的需要自己再进行修改。

//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;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

1、 建立一个顺序存储的线性表,实现线性表的插入、删除...
Elemtype *e \/\/初始条件:线性表L已存在,1<=i<=ListLength(L) \/\/功能:将线性表L中第i个数据元素删除 \/\/返回值:失败:ERROR \/\/ 成功:OK \/\/\/ int ListDelete_Sq(SqList *L,int i,Elemtype *e) { if (IsEmpty(L)) return ERROR; \/\/检测线性表是否为空 if (i<1||...

如何建立一个顺序存储的线性表,实现线性表的插入、删除操作
InsertLinkList(L);\/\/插入一个结点 LengthLinkList(L)\/\/求链表的长度。} 4.删除结点

用C语言实现线性表的顺序存储(创建,插入,删除和查找)
while(head->next!=NULL)\/\/本次循环使ptemp排好序 { ptemp=head->next;\/\/ptemp指向未排好序的第一个结点 head->next=ptemp->next;\/\/ ptemp->next=p1;\/\/ptemp也排好序了,ptemp变成排好序的第一个结点了 p1=ptemp;\/\/再次让p1成为第一个排好序的结点 } return p1;\/\/头结点为第一个结点}void create...

...删除其中所有值等于X的元素完整的C语言程序
操作结果:销毁顺序线性表L *\/void DestroyList(SqList *L) { free(L->elem);L->elem=NULL;L->length=0;L->listsize=0;}\/* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 *\/\/* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 *\/Status ListInsert(SqList *L,...

用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
if(i<1)return NULL;while(p && jnext;j++;} return p;} \/*单链表的按值查找*\/ LinkList LocalElem(LinkList la,int e){ LNode* p=la->next;while(p!=NULL && p->data!=e)p=p->next;return p;} \/*单链表插入操作*\/ bool InsertList(LinkList la,int i,int e){ \/\/在la...

线性表先插入再删除的算法 C语言
\/\/数序表存储 include<iostream> include"stdio.h"include"malloc.h"using namespace std;define maxsize 1024 typedef struct sequenlist { char data[maxsize];int last;}sequenlist;int insert(sequenlist *L,char x,int i){ int j;if(L->last==maxsize-1){ cout<<"overflow"<<endl;return...

线性表的基本操作c语言实现
\/\/删除操作 while( SeqList_Length(list) > 0 ){ int* p = (int*)SeqList_Delete(list, 0);printf("删除了: %d\\n", *p);} SeqList_Clear(list);SeqList_DesTroy(list);system("pause");return 0;} \/\/创建线性表 SeqList * SeqList_Create(int capacity){ TSeqList* ret = NULL...

《线性表的插入和删除算法实现》以及《栈和队列的插入和删除算法实现...
printf("请输入插入的数字:");scanf("%d",&n);while(p->next!=NULL&jnext;j++;} if(!(p->next)||j>i-1){ printf("error\\n");return 1;} s=(linklist)malloc(sizeof(node));s->data=n;s->next=p->next;p->next=s;return 1;} int deletelink(linklist l){ linklist p...

用C语言创建一个顺序表并完成插入等操作
char a[],int n) { \/\/建立顺序表int i;for(i = 0;i < n;i++) L->data[i] = a[i];L->length = n;}bool listinsert(sqlist *&L,int i,char e) { \/\/插入数据元素int j;if(i < 1 || i > L->length + 1) return false;i--;for(j = L->length;j > i;j--)...

给定一个顺序存储的线性表,请设计一个算法,删除所有大于min而且小于max...
\/\/删除表中所有大于min而且小于max的元素 status DeleteItem(SeqList &L,int min,int max){ int i,j;if(min >= max)return ERROR;for(i=0;i<L.length;i++){ if(L.elem[i]>min && L.elem[i]<max){ for(j=i;j<L.length;j++){ L.elem[j]=L.elem[j+1];--L.length;} }...

相似回答