首页 > 编程知识 正文

顺序表的创建增删改查c语言,c语言顺序表的删除

时间:2024-04-24 11:43:15 阅读:333966 作者:KFFL

本文目录一览:

用c语言创建一个顺序表,并完成创建,显示,查找,插入,删除,退出等任务

#includestdio.h

int n=0; //全局变量数组中元素个数

/***************************函数说明************************/

void insert(int * ss);

void show(int *ss);

void delete(int * ss);

void updata(int * ss);

/***************************主 函 数**************************/

main()

{

int bb[20]={0},j;

do

{

printf(" ╔-----------------------------------------------╗n"); //显示一个简易菜单

printf(" ┆ 1 --- 插入(Insert) ┆n");

printf(" ┆ 2 --- 修改(Update) ┆n");

printf(" ┆ 3 --- 删除(Delete) ┆n");

printf(" ┆ 4 --- 显示( Show ) ┆n");

printf(" ┆ 5 --- 退出( Exit ) ┆n");

printf(" ╚-----------------------------------------------╝n");

printf("请输入所要进行的操作序号: ");

scanf("%d",j); //接受用户的选择

switch(j) //接受用户的函数

{case 1:insert(bb);

break;

case 2:updata(bb);

break;

case 3:delete(bb);

break;

case 4:show(bb);

break;

case 5:break;

default:printf("错误选择!请重选n");break;

}

}while(j!=5); //直到i被赋值为5

return 0;

}

/**********************************插入函数**************************************/

void insert(int * ss)

{

int i,e,k=n; // i为要插入的位置 e为要插入的值

do{

printf("请输入要插入的位置: ");

scanf("%d",i);

//插入的位置为从 1-----n+1 超出则提示输入有误

if((i(k+1))||i==0) printf("输入有误!! n");

}while((i(k+1))||i==0);//直到输入的i值为 1---k+1

do{

ss[k+1]=ss[k]; //ss[i]后面的元素向后移动

}while((k--)!=(i-1));

printf("请输入要插入的值: ");

scanf("%d",e);

ss[i-1]=e;

n++;

}

/**********************************显示函数**************************************/

void show(int *ss)

{

int i=0;

for(i;in;i++)

{

printf(" %d -",ss[i]);

} //printf("b");

printf("n");

}

/**********************************删除函数**************************************/

void delete(int * ss)

{

int i,t;

do{

printf("请输入要删除的位置: ");

scanf("%d",i);

if(in) printf("输入有误!! 请重新输入: ");

}while(in);

t=i-1;

do{

ss[t]=ss[t+1];

}while((t++)!=n);

n--;

}

/**********************************修改函数**************************************/

void updata(int * ss)

{

int i,e;

do{

printf("请输入要修改的位置: ");

scanf("%d",i);

if(in) printf("输入有误!! 请重新输入: ");

}while(in);

printf("请输入要修改后的值: ");

scanf("%d",e);

ss[i-1]=e;

}

数据结构 c语言版 ——顺序表的查找、插入与删除

#includestdio.h

#includestdlib.h

#define N 10 //顺序表的最大容量

int length=0; //顺序表的当前元素个数

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量

#define LISTINCREAMENT 10 //线性表存储空间的分配增量

typedef struct LNode//线性单链表存储结构

{

int data;

struct LNode *next;

}LNode,*LinkList;

int CreatList_L(LinkListL)//创建一个线性链表

{

L=(LinkList)malloc(sizeof(LNode));//分配一个空间给链表,作为头结点

if(!L) exit(OVERFLOW);

L-next=NULL;

return OK;

}

int DestroyList_L(LinkList L)//销毁链表

{

if(L) free(L);

return OK;

}

int ListInsert_L(LinkListL,int i,int e)//再练表的第i个元素前插入一个元素e

{

LinkList p=L;//p指针定位于i-1

LNode *s;

int j=0;

while(pji-1) {p=p-next;j++;}//定位

if(!p||ji-1) return ERROR;//如果i1或大于链表元素个数+1

s=(LNode*)malloc(sizeof(LNode));

if(!s) exit(OVERFLOW);

s-data=e; //完成插入操作

s-next=p-next;

p-next=s;

return OK;

}

int ListDelet_L(LinkListL,int i,inte)//删除链表L中的第i个元素,并返回给e;

{

LinkList p=L;

LNode* q;

int j=0;

while(!pji-1) {p=p-next;j++;}//p指针定位于i-1;

if(!p-next||ji-1) return ERROR;

e=p-next-data; //完成删除操作

q=p-next;

p-next=p-next-next;

free(q);

return OK;

}

int ListTraverse_L(LinkList L,int n)//链表的遍历

{

int i=0;

if(!L)return ERROR;

L=L-next;

while(L)

{

if(L-data==n)return i;

L=L-next;

i++;

}

return FALSE;

}

int InverseSingleList_L(LinkList L)

{

if(!L-next||!L-next-next)//如果链表少于2个Node那么链表不需要改变顺序

return OK;

LNode *p,*q;

p=L-next; //第一次因为p是最后一个连接所以把p-next设为空

q=p-next;

p-next=NULL;

p=q;

while(p)

{

q=p-next; //用q去保留p后面一个Node;

p-next=L-next;

L-next=p;

p=q;

}

return OK;

}

int main()

{

int List[N];

LinkList L;

int ch,exit='N';

do

{

system("CLS");

printf("tt********************************************n");

printf("tt* 1.创建一个顺序表 .........(1) *n");

printf("tt* 2.在顺序表中查找元表.........(2) *n");

printf("tt* 3.在顺序表中插入元表.........(3) *n");

printf("tt* 4.在顺序表中删除元表.........(4) *n");

printf("tt* 5.退出 .........(5) *n");

printf("tt********************************************n");

printf("n请选择操作代码:");

ch=getchar();

switch(ch)

{

case '1':

printf("n请输入十个元素");

CreatList_L(L);

for(length=0;lengthN;length++)

{

scanf("%d",List[length]);

getchar();

ListInsert_L(L,length+1,List[length]);

}

printf("n创建成功!");

getchar();

break;

case '2':

scanf("%d",List[0]);

if(ListTraverse_L(L,List[0]))printf("该元素存在该年表的第%d个位置",ListTraverse_L(L,List[0]));

else printf("不存在该元素");

getchar();

break;

case '3':

scanf("%d%d",length,List[0]);

ListInsert_L(L,length,List[0]);

system("pause");

break;

case '4':

scanf("%d",length);

ListDelet_L(L,length,List[0]);

system("pause");

break;

case '5':

printf("n您是否真的要退出程序(Y/N):");

getchar();

exit=getchar();

break;

default:

getchar();

printf("n无效输入,请重新选择...:");

getchar();

break;

}

}while(exit!='y'exit!='Y');

}

用c语言编写一段程序,建立一个顺序表(需要自己输入数据,并插入数据、删除数据)。

#include stdio.h

#define LIST_INIT_SIZE 10

#define LISTINCREMENT 10

#define ERROR 0

typedef struct{

 int *elem;

 int length;

 int listsize;

} SqList;

void InitList_Sq(SqList *l)

{

 l-elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));

 if(!l-elem) exit(0);

 l-length=0;

 l-listsize=LIST_INIT_SIZE;

}

int InList(SqList *l)

{

 int *p,*newbase;

 p=l-elem;

 while(1)

 {

  for(;pl-elem+l-listsize;p++)

  {

   scanf("%d",p);if(*p==-1) break;l-length++;

  }

  if((p==l-elem+l-listsize))

  {

   newbase=(int *)realloc(l-elem,(l-listsize+LISTINCREMENT)*sizeof(int));

   p=l-elem+l-length;

   l-listsize=l-listsize+LISTINCREMENT; 

   if(!l-elem) return ERROR;

  }

  if(*p==-1) break;

 }

 return 1; 

}

void PrList(SqList *l)

{

 int *p,i;

 p=l-elem;

 for(;pl-elem+l-length;p++)

 printf("%d ",*p);

}

int ListInsert_sq(SqList *l,int i,int e)

{

 int *newbase,*p,*q;

 if(i1||il-length) return ERROR;

 if(l-length==l-listsize)

 {

  newbase=(int *)realloc(l-elem,(l-listsize+LISTINCREMENT)*sizeof(int));

  if(!newbase) return ERROR;

  l-elem=newbase;

  l-listsize+=LISTINCREMENT;

 }

 q=l-elem+i-1;

 for(p=l-elem+l-length-1;p=q;p--)

 *(p+1)=*(p);

 *q=e;

 l-length+=1;

 return 1;

}

int ListDelet_sq(SqList *l,int i)

{

 int *p,e;

 if((i1)||(il-length)) return ERROR;

 p=l-elem+i-1;

 e=*p;

 for(;pl-elem+l-length-1;p++)

 *p=*(p+1);

 l-length--;

 printf("要删除的元素是:%dn",e);

 return 1;

}

void main()

{

 int i,j,n;

 char a;

 SqList la;

 InitList_Sq(la);

 printf("请输入顺序表中的元素:n");

 if(!InList(la)) return ERROR;

 do

 {

  printf("请输入需要插入元素的位置及元素:(a,b)n");

  scanf("%d,%d",i,j);

  if(!ListInsert_sq(la,i,j)) return ERROR;

  printf("是否还需要插入元素?(N/Y)");

  getchar();

  scanf("%c",a);

  if(a=='N'||a=='n') break;

 }while(1);

 do

 { 

  printf("请输入需要删除元素的位置:n");

  scanf("%d",i);

  if(!ListDelet_sq(la,i)) return ERROR;

  printf("是否还需要删除元素?(N/Y)");

  getchar();

  scanf("%c",a);

  if(a=='N'||a=='n') break;

 }while(1);

 printf("最后的顺序表为:n");

 PrList(la); 

}

用C语言编写一个有关顺序表的程序代码

#include stdio.h

#include malloc.h

#define MaxSize 50

typedef char ElemType;

typedef struct

{

ElemType elem[MaxSize];

int length;

}SqList;

void InitList(SqList *L) /* 初始化顺序表 */

{

L=(SqList *)malloc(sizeof(SqList));

L-length=0;

}

void CreateListR(SqList *L,ElemType a[],int n) /*创建顺序表 */

{

int i;

for(i=0;in;i++)

L=(SqList *)malloc(sizeof(SqList));

L-elem[i]=a[i];

L-length++;

}

void DispList(SqList *L) /* 输出顺序表 */

{

int i;

if(ListEmpty(L)) return;

for(i=0;iL-length;i++)

printf("%c",L-elem[i]);

printf("n");

}

int ListLength(SqList *L) /* 求顺序表的长度 */

{

return(L-length);

}

int ListEmpty(SqList *L) /* 求顺序表是否为空 */

{

return(L-length==0);

}

int GetElem(SqList *L,int i,ElemType e) /*求顺序表中某个数据的元素值 */

{

if(i1||iL-length)

return 0;

else

e=L-elem[i-1];

return 1;

}

int LocateElem(SqList *L,ElemType e) /*按值查找元素*/

{

int i=0;

while(iL-lengthL-elem[i]!=e) i++;

if(i=L-length)

return 0;

else

return i+1;

}

int ListInsert(SqList *L,int i,ElemType e) /*按i位置插入元素*/

{

int j;

if(i1||iL-length+1)

return 0;

i--;

for (j=L-length;ji;j--)

L-elem[j]=L-elem[j-1];

L-elem[i]=e;

L-length++;

return 1;

}

int ListDelete(SqList *L,int i,ElemType e) /*删除某个位置的元素*/

{

int j;

if (i1||iL-length)

return 0;

i--;

e=L-elem[i]; /*e中的放elem[i]有何用..以后没用到*/

for(j=i;jL-length-1;j++)

L-elem[j]=L-elem[j+1];

L-length--;

return 1;

}

void DestroyList(SqList *L) /*销毁链表*/

{

free(L);

}

void main()

{

SqList L;

ElemType a[]={'a','b','c','d'};

int c;

int e;

while(1)

{

printf("Please Choose the step you want ?nn");

scanf("%d",c);

if(c==0) break;

switch(c)

{

case 1: InitList(L);break;

case 2: CreateListR(L,a,4);break;

case 3: DispList(L);break;

case 4: printf("long %d", ListLength(L));break;

case 5: printf("%d",ListEmpty(L));break;

case 6: GetElem(L,3,e);break;

case 7: LocateElem(L,'a');break;

case 8: ListInsert(L,4,'f');break;

case 9: DispList(L);break;

case 10: ListDelete(L,3,e);break;

case 11: DispList(L);break;

case 12: DestroyList(L);break;

default: printf("error data");break;

}

}

}

使用C语言编写程序,实现顺序表的基本运算——插入和删除。

typedef struct

{

int *elem;

int length;

int listsize;

} Sqlist;

status Create_sq(Sqlist *L,int n)

{

int i;

L-elem=(int*)malloc(100*sizeof(int));

if(!L-elem) return 0;

for(i=0;in;i++)

scanf("%d",(L-elem[i]));

L-length=n;

L-listsize=100;

return 1;

}

status Listinsert_sq(Sqlist *L,int i,int e)

{

int *q,*p,*newbase;

if(i1||iL-length+1) return 0;

if(L-length=L-listsize)

{

newbase=(int*)realloc(L-elem,(L-listsize+10)*sizeof(int));

if(!newbase) exit(-2);

L-elem=newbase;

L-listsize+=10;

}

q=(L-elem[i-1]);

for(p=(L-elem[L-length-1]);p=q;--p)

*(p+1)=*p;

*q=e;

++L-length;

return 1;

}

int main()

{

Sqlist L1;

int n,a;

int i,e;

printf("n please input the number of data:n");

scanf("%d",n);

if(Create_sq(L1,n)==1)

{

scanf("%d%d",i,e);

a=Listinsert_sq(L1,i,e);

if(a==1)

printf("insert successn");

else printf("insert falsen");

printf("the list elements are:n");

for(i=1;i=L1.length;i++)

{

printf("%dt",L1.elem[i-1]);

}

}

return 0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。