考研數據結構-順序表
一、靜態順序表
1.結構
#include<stdio.h>
#include<stdlib.h>
#define MaxSize = 100
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
2.插入操作
void insertSqlist(int Sqlist[],int *len,int i,int item){
int t;
if(*len==MaxSize||i<1||i>*len+1){
printf("插入不合法");
}
for(t=*len-1;t>=i-1;t--){
Sqlist[t+1]=Sqlist[t];
}
Sqlist[i-1]=item;
*len=*len+1;
}
3.刪除操作
void deleteSqlist(Sqlist[],int *len,int i){
int j;
if(i<0||i>*len){
printf("刪除不合法");
return;
}
for(j=i;j<=*len-1;j++){
Sqlist[j-1]=Sqlist[j];
*len=*len-1;
}
}
4.測試代碼
int main(){
int Sqlist[MaxSize];
int i;
int len;
int item;
int local1;
int local2;
printf("請輸入六個數字:");
for(i=0;i<6;i++){
scanf("%d",&Sqlist[i]);
}
len=i;
printf("\n");
for (i=0;i<len;i++) {
printf("%d ",Sqlist[i]);
}
printf("請輸入要插入的位置:");
scanf("%d",&local);
printf("請輸入要插入的數字:");
scanf("%d",&item);
insertElem(Sqlist,&len, local,item);
printf("after insert\n");
for (i=0;i<len;i++) {
printf("%d ",Sqlist[i]);
}
printf("\n");
printf("請輸入要刪除的位置:");
scanf("%d",&local2);
deleteElem(Sqlist, &len, local2);
for (i=0;i<len;i++) {
printf("%d ",Sqlist[i]);
}
printf("\n");
return 0;
}
二、動態順序表
1.核心思想
使用指針,使用realloc函數動態分配
2.結構
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef int ElemType;
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
3.初始化
void initSqlist(Sqlist *L){
L->elem=(int *)malloc(MaxSize*sizeof(int));
if(!L->elem){
exit(0);
}
L->length=0;
L->listsize=MaxSize;
}
4.插入
void Insert(Sqlist *L,int i,int item){
ElemType *base,*insertPtr,*p;
if(i<1||i>L->length+1) exit(0);
if(L->length==L->listsize){
base=(ElemType*)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));
L->elem=base;
L->listsize=L->listsize+100;
}
insertPtr=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>insertPtr;p--){
*(p+1)=*p;
}
*insertPtr=item;
L->length++;
}
5.刪除
void Delete(Sqlist *L,int i){
ElemType *delItem,*q;
if(i<1||i>L->length) exit(0);
deItem=&(L->elem[i-1]);
q=L->elem+L->length-1;
for(++delItem;delItem<=q;++delItem){
*(delItem-1)=*delItem;
}
L->length--;
}
6.測試代碼
與靜態同理