基于C语言的数据结构,怎样做顺序表插入

Python016

基于C语言的数据结构,怎样做顺序表插入,第1张

1、顺序表的插入,常用方法就是从插入点后平移数据

2、例如:

void InsertSeqList(SeqList L, DataType x, int i)

{ //将元素x插入到顺序表L的第i个数据元素之前

if(L.length==Maxsize)exit("表已满")

if(i<1||i>L.length+1) exit("位置错")

for (j=L.lenghtj>=ij--)

L.data[j]=L.data[j-1]//平移插入点之后的数据

L.data[i-1]=x//在插入点插入数据

L.length++

}

L.data[j]=L.data[j-1]的意思是把要插入的位置后的数据都依次往后面移动一位,比如要插入在第6个位置上,共8个数据的链表里,先把第8个数据复制到第9个位置上,在把第7个数据复制到第8个位置上,在把第6个数据复制到第7个位置上。这样第6个位置后就可以写入,覆盖掉以前的值就好了。这样做的意思是腾出可以插入的地方而不破坏数据的顺序排放。

/*

GY52122008

请输入插入字符 : -

请输入插入位置 : 7

GY5212-2008

Press any key to continue

*/

#include <malloc.h>

#include <stdio.h>

#include <string.h>

#define maxsize 100

typedef struct {

char *data

int length

}sqlist

void initlist(sqlist *&L) { //初始化顺序表

L = (sqlist *)malloc(sizeof(sqlist))

L->data = (char *)malloc(maxsize)

L->length = 0

}

void createlist(sqlist *&L,char a[],int n) { //建立顺序表

int i

for(i = 0i < ni++) 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->lengthj > ij--) L->data[j] = L->data[j - 1]

L->data[i] = e

L->length++

return true

}

bool listdelete(sqlist *&L,int i,char &e) { //删除数据元素

int j

if(i < 1 || i> L->length) return false

i--

e = L->data[i]

for(j = 1j < L->length - 1j++) L->data[j] = L->data[j + 1]

L->length--

return true

}

int listlength(sqlist *L) { //求线性表长度

return(L->length)

}

void destroylist(sqlist *&L) {

free(L)

}

int locateelem(sqlist *L,char e) { //按元素查找

int i = 0

while(i < L->length && L->data[i] != e) i++

if(i >= L->length) return 0

else return i + 1

}

void displist(sqlist *L) {  //输出线性表

int i

for(i = 0i < L->lengthi++) printf("%c",L->data[i])

printf("\n")

}

int main() {

int pos,len

char ch,data[50] = "GY52122008"

sqlist *L

initlist(L) // 先初始化

len = strlen(data)

createlist(L,data,len) // 创建表

displist(L)

printf("请输入插入字符 : ")

scanf("%c",&ch)

printf("请输入插入位置 : ")

scanf("%d",&pos)

if(listinsert(L,pos,ch)) displist(L)

else printf("插入操作失败。\n")

free(L->data)

free(L)

return 0

}