#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 10 #define OK 1 #define ERROR 0 #define TRUE 1 #define FLASE 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; typedef struct{ ElemType * elem; int len; } Sqlist; /************************** 创建 输入:顺序表指针 输出:状态码 功能:初始化顺序表 **************************/ Status initList(Sqlist *L){ L->elem = (ElemType*)malloc(SIZE * sizeof(ElemType*)); if(!L->elem){ printf("overflow!\n"); return OVERFLOW; } L->len = 0; return OK; } /************************** 插入 输入:顺序表指针,插入位,插入值 输出:状态码 功能:插入数据 **************************/ Status insertList(Sqlist *L, int index,ElemType e){ index--; //输入index起始为1,而程序起始为0,下面亦同 //overflow if( index>L->len || index<0 ||L->len>=SIZE) { printf("overflow!\n"); return OVERFLOW; } //insert last one if( index == L->len){ *(L->elem+L->len)=e; L->len++; return OK; } //ElemType * q = L->elem + index; ElemType * q = &(L->elem[index]); ElemType * p = &(L->elem[L->len]); for(;p>q;p--) *p=*(p-1); *p = e; L->len++; return OK; } /************************** 删除 输入:顺序表指针,删除位,存储指针 输出:状态码 功能:删除数据并返回其值 **************************/ Status deleteList(Sqlist *L,int index,ElemType *e){ index--; if(index>L->len||index<0){ printf("overflow!!\n"); return OVERFLOW; } if(index == L->len){ L->len--; return OK; } ElemType * q = L->elem+L->len; ElemType * p = &(L->elem[index]); while(p<q){ *p = *(p+1); p++; } L->len--; return OK; } /************************** 追加 输入:顺序表指针,追加值 输出:状态码 功能:追加数据 **************************/ Status appendList(Sqlist * L,ElemType e){ if(L->len >= SIZE){ printf("overflow!\n"); return OVERFLOW; } *(L->elem + L->len++) = e; return OK; } /************************** 打印 输入:顺序表指针 输出:状态码 功能:将顺序表值一一打印出来 **************************/ Status printList(Sqlist L){ if(L.len == 0)printf("list is empty!\n"); ElemType * p = L.elem; for(;p<(L.elem+L.len);p++) printf("[%d] ",*p); printf("\n"); return OK; } int main(){ int index,e; Sqlist L; initList(&L); printList(L); //append printf("[append] enter value:"); scanf("%d",&e); appendList(&L,e); printList(L); //append printf("[append] enter value:"); scanf("%d",&e); appendList(&L,e); printList(L); //insert printf("[insert] enter index:"); scanf("%d",&index); printf("[insert] enter value:"); scanf("%d",&e); insertList(&L,index,e); printList(L); //delete printf("[delete] enter index:"); scanf("%d",&index); deleteList(&L,index,&e); printList(L); return 0; }
下面是另一种写法(但推荐使用上面一种)
#include <stdio.h> #include <stdlib.h> #define MAX 100 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define OVERFLOW -2 typedef int ElemType; typedef int Status; typedef struct{ ElemType * elem; int last; } Sqlist; Sqlist initList(){ Sqlist L; L.elem = (ElemType*)malloc(MAX * sizeof(ElemType)); if(!L.elem){ printf("overflow!!\n"); exit(OVERFLOW); } L.last = 0; return L; } Sqlist insertList(Sqlist L,int index,ElemType e){ index--; if( L.last >= MAX || index<0 || index>L.last){ printf("overflow!\n"); exit(OVERFLOW); } if( L.last == index ){ *(L.elem + L.last++) = e; return L; } ElemType * p = L.elem + L.last; ElemType * q = &L.elem[index]; while(p>q){ *p = *(p-1); p--; } *p = e; L.last++; return L; } Sqlist deleteList(Sqlist L,int index,ElemType *e){ index--; if( index < 0 || index >=L.last){ printf("overflow!!\n"); exit(OVERFLOW); } if(index == L.last-1){ L.last--; return L; } ElemType * p = &(L.elem[index]); ElemType * q = L.elem + L.last - 1; while(p<q){ *p = *(p+1); p++; } L.last--; return L; } Status printList(Sqlist L){ if(L.last == 0){ printf("empty\n"); return OK; } ElemType * p = L.elem; ElemType * q = L.elem+L.last; while(p<q){ printf("[%d] ",*p); p++; } printf("\n"); return OK; } Sqlist appendList(Sqlist L,ElemType e){ if(L.last >= MAX){ printf("overflow!\n"); exit(OVERFLOW); } *(L.elem + L.last++) = e; return L; } int main(){ int index,e; Sqlist L = initList(); printList(L); //append printf("[append] enter value:"); scanf("%d",&e); L = appendList(L,e); printList(L); //append printf("[append] enter value:"); scanf("%d",&e); L = appendList(L,e); printList(L); //insert printf("[insert] enter index:"); scanf("%d",&index); printf("[insert] enter value:"); scanf("%d",&e); L = insertList(L,index,e); printList(L); //delete printf("[delete] enter index:"); scanf("%d",&index); L = deleteList(L,index,&e); printList(L); return 0; }
时间: 2024-10-10 14:29:11