c语言中删除顺序表的函数 c语言排序后删除相同的数

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

typedef struct

成都创新互联主要从事网站制作、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务同心,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

{

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 success\n");

else printf("insert false\n");

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

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

{

printf("%d\t",L1.elem[i-1]);

}

}

return 0;

}

顺序表的插入删除及应用(C语言版的)

我这有两种方法,一种是按位置插入,另一种是按值。

(1)、

void insert1(elem *p,int i,int x)//在第i个位置插入x值

{int j;//j 是记录a[M]的一个下标

if((i=0||ip-len)||(p-len=M))

printf("You Don't insert X in The Locate %d !!!!!!!!\n\n",i);//判断i的值是否合法

else //合法后在i插入x

{for (j=p-len;ji-1;j--)

p-a[j]=p-a[j-1]; //使第i个位置后面的数依次后移

p-a[i-1]=x;//在第i个位置插入x

p-len++;//长度加1

}

}

(2)、

void insert2(elem *p,int x,int y)//在值x的位置插入y值

{int k=locate(p,x);//调用locate()函数(查找x的位置)

if(k==-1)//返回值为-1时,说明没有x值

printf("The list haven't number X ;%d !\n",x);

else//否则调用insert1(),在位置k插入y值

insert1(p, k, y);

}

int locate(elem *p,int x)//这是查找定位x的值

{int i;

for(i=0;ip-len;i++)

if(p-a[i]==x)

break;

if(i==p-len)

return(-1);//没有x值

else

return(i+1);//x值位于第i+1位置

}

下面的是删除,也有两种方法。一是按位置,一是按值。

(1)、

void dele1(elem *p,int i)//删除第i个数

{int j;

if(i1||ip-len||p-len==0||iM)//判断是否合法

printf("The list Don't have The locate %d!!!!!!!!!\n\n",i);

else//合法则删除

{for(j=i;j=p-len;j++)

p-a[j-1]=p-a[j];

p-len--;

}

}

(2)、

void dele2(elem *p,int x)

{int k=locate(p,x);

if(k==-1)

printf("Don't delete the number X:%d !!!!!!!!!\n\n",x);

else

dele1(p,k);

}

下面的是删除重复的数。

void deleof(elem *p)

{int i,j;

for(j=0;jp-len;j++)

{for(i=p-len-1;ij;i--)

if(p-a[j]==p-a[i])

dele1(p,i+1);

}

}

不足之外在所难免请诸位指正.

删除顺序表中的第i个元素,,给个完整的 C语言代码吧~~~ 谢谢

#include stdio.h

#define MAXSIZE 100

typedef struct{

int elem[MAXSIZE]; 

int last;

} SeqList;

void deletelist(SeqList *l,int i,int k);

int main(){  

int i,k,j=0;

SeqList *l;

SeqList a;

l=a; 

scanf("%d%d",i,k);//输入i和k

while(scanf("%d",l-elem[j])!=EOF)

j++;//输入顺序表内容

l-last=j-1;

deletelist(l,i,k); 

return 0;

扩展资料

顺序表插入元素

向已有顺序表中插入数据元素,根据插入位置的不同,可分为以下 3 种情况:

1、插入到顺序表的表头;

2、在表的中间位置插入元素;

3、尾随顺序表中已有元素,作为顺序表中的最后一个元素;将要插入位置元素以及后续的元素整体向后移动一个位置;将元素放到腾出来的位置上。

注意,动态数组额外申请更多物理空间使用的是 realloc 函数。并且,在实现后续元素整体后移的过程,目标位置其实是有数据的,还是 3,只是下一步新插入元素时会把旧元素直接覆盖。

C语言线性顺序表的插入和删除

#include"stdio.h"

#include"malloc.h"

#include"iostream.h"

typedef int status;

typedef int elementype;

#define INITSIZE 100

#define INCREMENT 2

struct sqlist

{

elementype *elem;

int length;

int listsize;

};

//建立链表,并排列数据

status listinit(sqlist l)

{

int i=0,x,j,t;

l.elem=(elementype *)malloc(INITSIZE*sizeof(elementype));

if(!l.elem)

{

cout"建表失败"endl;

return 0;

}

l.length=0;

l.listsize=INITSIZE;

while(1)

{

cout"请输入数据(输入0时结束):";

cinx;

if(x==0) break;

l.elem[i]=x;

++l.length;

i++;

}

for(i=0;il.length-1;i++)

for(j=0;jl.length-i-1;j++)

if(l.elem[j]l.elem[j+1])

{

t=l.elem[j+1];

l.elem[j+1]=l.elem[j];

l.elem[j]=t;

}

cout"排序成功"endl;

return 1;

}

//插入数据

status listinsert(sqlist l,int i,elementype e)

{

elementype *p,*q,*newbase;

if(i1||il.length)

{

cout"i输入错误"endl;

return 0;

}

if(l.length=l.listsize)

{

newbase=(elementype*)realloc(l.elem,(l.listsize+INCREMENT)*sizeof(elementype));

if(!newbase)

{

cout"申请空间失败"endl;

return 0;

}

l.elem=newbase;

l.listsize=l.listsize+INCREMENT;

}

q=(l.elem[i-1]);

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

{

*(p+1)=*p;

}

*q=e;

++l.length;

cout"插入成功";

return 1;

}

//删除数据

status listdelete(sqlist l,int i,elementype e)

{

elementype *p,*q;

if(i1||il.length)

{

cout"i输入错误"endl;

return 0;

}

p=(l.elem[i-1]);

e=*p;

q=l.elem+l.length-1;

for(++p;p=q;++p)

{

*(p-1)=*p;

}

--l.length;

cout"删除成功"endl;

free(e);

return 1;

}

//删除重复的数据

status listdeleterepeat(sqlist l)

{

int i,j;

elementype *p,*q,e;

for(i=0;il.length-1;i++)

for(j=i+1;jl.length-1;j++)

if(l.elem[i]==l.elem[j])

{

p=(l.elem[j]);

e=*p;

q=l.elem+l.length-1;

for(++p;p=q;++p)

{

*(p-1)=*p;

}

--l.length;

free(e);

j--;

}

return 1;

}

//输出顺序表数据

status displaylist(sqlist l)

{

int i;

cout"顺序表的数据为:"endl;

for(i=0;il.length;i++)

{

coutl.elem[i]" ";

}

coutendl;

return 1;

}

//查找数据

status locatelem(sqlist l,int x)

{

elementype *p;

int i=1;

p=l.elem;

while(il.length(*p++)!=x)

i++;

coutiendl;

return 1;

}

//清空列表

void listclear(sqlist l)

{

l.length=0;

}

//销毁顺序表

void listdestroy(sqlist l)

{

if(l.elem)

free(l.elem);

}

//求顺序表长度

status listlength(sqlist l)

{

cout"顺序表的长度为:"l.lengthendl;

return 1;

}

int main()

{

sqlist l;

int a,i,x;

elementype e;

cout"*************************************************"endl;

cout"* 顺序表的表示和实现 *"endl;

cout"*************************************************"endl;

do{

cout"*************************************************"endl;

cout"* 菜单 *"endl;

cout"* 1.建立顺序表 *"endl;

cout"* 2.插入数据 *"endl;

cout"* 3.删除数据 *"endl;

cout"* 4.删除重复数据 *"endl;

cout"* 5.清空数据 *"endl;

cout"* 6.查找数据 *"endl;

cout"* 7.顺序表的长度 *"endl;

cout"* 8.显示顺序表 *"endl;

cout"* 0.退出顺序表 *"endl;

cout"*************************************************"endl;

cout"输入你的选择:";

cina;

switch(a)

{

case 1: listinit(l);

displaylist(l);

break;

case 2: cout"请输入要插入数据的位置:";

cini;

cout"请输入要插入的数据元素:";

cine;

listinsert(l,i,e);

displaylist(l);

break;

case 3: cout"请输入要删除的数据的位置:";

cini;

listdelete(l,i,e);

displaylist(l);

break;

case 4: cout"删除前的数据为:";

displaylist(l);

listdeleterepeat(l);

cout"删除后的数据为:";

displaylist(l);

break;

case 5: cout"清空前为:";

displaylist(l);

cout"清空后为:";

listclear(l);

displaylist(l);

break;

case 6: cout"输入你要查找的数据:";

cinx;

cout"你要查找的数据的位置为:";

locatelem(l,x);

displaylist(l);

break;

case 7: cout"顺序表的长度为:";

listlength(l);

break;

case 8: displaylist(l);

break;

default: break;

}

}while(a!=0);

return 1;

}

C语言中顺序列表的插入删除程序

#include stdio.h

#include stdlib.h

#include string.h

#define MaxSize 50

#define len(x) sizeof(x)/sizeof(x[0])

typedef struct SqList

{

int data[MaxSize];

int length;

}SqList;

static SqList Create(int a[],int n);//用一个数组创建静态顺序表

static void Print(SqList L);//打印一个静态顺序表

static void ListInsert(SqList *p,int i,int e);//L的第i个位置插入e

static void ListDelete(SqList *p,int i);//删除列表第i个数据

static int LocateElem(SqList L,int e);//查找第一个值等于e的元素,返回其位序

static void Reverse(SqList *p,int left,int right);//逆置表的第left到right的元素顺序

/*递增序列折半查找等于e的元素,返回其位序*/

static int Binsearch(SqList L,int e);

int main()

{

int a[]={1,2,3,4};

SqList L=Create(a,len(a));

ListInsert(L,2,100);

ListDelete(L,2);

Reverse(L,1,4);

Print(L);

printf("%d\n",Binsearch(L,2));

}

static SqList Create(int a[],int n)

{

SqList L;

int i;

L.length=n;

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

L.data[i]=a[i];

return L;

}

static void Print(SqList L)

{

int i;

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

printf("%d ",L.data[i]);

printf("\n");

}

static void ListInsert(SqList *p,int i,int e)

{

int j;

if(i1 || ip-length+1)

{printf("错误范围\n");}

if(p-length=MaxSize)

{printf("存储空间已满\n");}

for(j=p-length;j=i;j--)

p-data[j]=p-data[j-1];

p-data[i-1]=e;

p-length++;

}

static void ListDelete(SqList *p,int i)

{

if(i1 || ip-length)

{printf("删除范围出错\n");return;}

while(ip-length)

{

p-data[i-1]=p-data[i];i++;

}

p-length--;

}

static int LocateElem(SqList L,int e)

{

int i;

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

if(L.data[i]==e)

return i+1;

return 0;

}

static void Reverse(SqList *p,int left,int right)

{

int temp;

if(leftright || left1 || rightp-length)

{printf("错误的输入\n");return;}

for(left--,right--;leftright;left++,right--)

{

temp=p-data[left];

p-data[left]=p-data[right];

p-data[right]=temp;

}

}

static int Binsearch(SqList L,int e)

{

int mid,low=0,high=L.length-1;

while((low+1)!=high)

{

mid=(low+high)/2;

if(L.data[mid]==e) return mid+1;

if(eL.data[mid]) high=mid;

if(eL.data[mid]) low=mid;

}

return 0;

}

ListInsert 和 ListDelete 为你所要的函数

数据结构 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("\t\t********************************************\n");

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

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

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

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

printf("\t\t* 5.退出 .........(5) *\n");

printf("\t\t********************************************\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语言中删除顺序表的函数 c语言排序后删除相同的数
浏览地址:http://scjbc.cn/article/dooccjc.html

其他资讯