❶ 用c语言代码写顺序线性表中删除操作
status deletedatalist(sqlist *l)
{
int i=0,n,j;
cout<<"请输入你要删除的数据:";
cin>>n;
for(i=0;i<l->length;i++)
{
if(n==l->elem[i])
{
for(j=i;j<l->length;j++)
{
l->elem[j]=l->elem[j+1];
}
}
}
l->length--;
return 1;
}
❷ c语言线性表中元素的删除
a[0]不存放元素,那我用来放表的大小了?
#include
<stdio.h>
#define
N
10
int
vector[N];
void
initialize_vector()
{
vector[0]
=
0;
}
void
print_vector()
{
int
i,
size;
for
(i
=
1,
size
=
vector[0];
i
<=
size;
++i)
printf("%d
",
vector[i]);
printf("\n");
}
void
add(int
value)
{
if
(vector[0]
<
N
-
1)
{
vector[++vector[0]]
=
value;
}
}
void
erase(int
value)
{
int
c,
i,
j,
size
=
vector[0];
for
(i
=
0,
j
=
1,
c
=
0;
j
<=
size;
++j)
{
if
(vector[j]
==
value)
++c;
else
vector[++i]
=
vector[j];
}
vector[0]
-=
c;
}
int
main()
{
int
array[]
=
{
5,
4,
3,
3,
6,
7,
3,
9,
},
i;
for
(i
=
0;
i
<
sizeof(array)
/
sizeof(int);
++i)
add(array[i]);
printf("before
remove:
\n");
print_vector();
erase(3);
printf("after
remove:
\n");
print_vector();
return
0;
}
❸ C语言,线性表,插入,删除,合并的实现。要源代码,谢谢了。
~刚好上学期数据结构老师非要叫写,还留了个~~
#include<stdio.h>
int c=0;//C是用来计算数组中数的个数的,当下面插入时就c++;删除时就c--
void print(int a[100])//打印整个数组的函数
{
int b;
for(b=0;b<c;b++)
printf("%d ",a[b]);
printf("\n");
}
void cr(int a[])//插入函数
{
int i,j,m;
printf("请输入要插入的位置:");
scanf("%d",&i);
//*************************************************************
//这些是用来判断,所输入的位置是否存在,
//如果不存在,则重新再输入一次,当然这些可以不要,那在运行的时候
//就需要保证输入的位置都是对的!
while(i<1||i>c+1)
{
printf("没有这个位置,请重新输入要插入的位置:");
scanf("%d",&i);
}
//**************************************************************
printf("请输入要插入的数:");
scanf("%d",&j);
(c)++;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//用来把要插入位置以后的数,都往后移动一会,这样腾出位置
for(m=c-1;m>=i;m--)
{
a[m]=a[m-1];
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a[i-1]=j;//把要插入的数放入前面腾出的位置
print(a);
}
void del(int a[])//删除函数
{
int i,m;
printf("请输入要删除数的位置:");
scanf("%d",&i);
(c)--;
for(m=i-1;m<c;m++)
a[m]=a[m+1];
print(a);
}
void find(int a[])//查找函数
{
int i,m;
char x;
printf("请输入要查找的数:");
scanf("%d",&i);
for(m=0;m<c;m++)
{
if(a[m]==i)break;
}
if(m!=c)
{
printf("找到该数下标是%d.\n",m);
}
else
printf("查无此数.\n");
}
void hb(int a[])
{
int b[100]={0};
int d,i;
printf("请输入要并入的数组数据数量(不能大于%d):",100-c);
scanf("%d",&d);
for(i=0;i<d;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&b[i]);
}
printf("\n并入\n");
print(a);
printf("\n得到:\n");
for(i=0;i<d;i++)
{
a[c]=b[i];
c++;
}
print(a);
}
void main()
{
int a[100]={0};
int i,j,m,n;
printf("请输入数据数量:");
scanf("%d",&c);
for(i=0;i<c;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i]);
}
print(a);
//__________________________________________________________
//次处采用选择结构,既根据输入m的值来判断执行下面哪个语句
printf("插入请输入1,删除请输入2,查找请输入3,合并新数据4\n任意数结束:");
scanf("%d",&m);
switch (m)
{
case 1 :cr(a);break;
case 2 :del(a);break;
case 3 :find(a);break;
case 4 :hb(a);break;
default : break;
};
//______________________________________________________________
//如果不要两横线内的东西,则屏蔽掉后使用下面三句
//cr(a);
//del(a);
//find(a)
}
❹ 用c语言程序实现线性表的打印,插入,删除等操作
作业还是自己做吧!
❺ 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时结束):";
cin>>x;
if(x==0) break;
l.elem[i]=x;
++l.length;
i++;
}
for(i=0;i<l.length-1;i++)
for(j=0;j<l.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(i<1||i>l.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(i<1||i>l.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;i<l.length-1;i++)
for(j=i+1;j<l.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;i<l.length;i++)
{
cout<<l.elem[i]<<" ";
}
cout<<endl;
return 1;
}
//查找数据
status locatelem(sqlist &l,int x)
{
elementype *p;
int i=1;
p=l.elem;
while(i<l.length&&(*p++)!=x)
i++;
cout<<i<<endl;
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.length<<endl;
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<<"输入你的选择:";
cin>>a;
switch(a)
{
case 1: listinit(l);
displaylist(l);
break;
case 2: cout<<"请输入要插入数据的位置:";
cin>>i;
cout<<"请输入要插入的数据元素:";
cin>>e;
listinsert(l,i,e);
displaylist(l);
break;
case 3: cout<<"请输入要删除的数据的位置:";
cin>>i;
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<<"输入你要查找的数据:";
cin>>x;
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语言编程
在网上找个链表的例子程序肯定有的
❼ c语言线性表结点删除
那是因为每次输出在屏幕上的星号你并未清除,线性表里的星号的确删除了,保持5个星号。但屏幕的东西只有你用SYSTEM命令才会自己删除的啊。 如果你想要走动的5星效果的话,应该将其他置为空格,每次从0开始输出到最后一个五星,然后清屏。 清屏是System("cls");
❽ 怎样用C语言摧毁线性表
你的意思是将线性表在内存中消失还是什么?
内存中消失:将将全部结点用free函数将其释放掉,这样就在内存中消失了。
如果你不想访问其他结点。那直接将头指针free就可以了。至于其他数据已经找不到了。不过这样做的是你的系统有时会崩溃。因为有内容在内存中没有得到有效的释放
❾ 怎样用C语言写线性表删除函数(不要复制网上的)
#include<iostream>
#include<iomanip>
using namespace std;
class list
{
public:
int num,elem;
class list* next;
};
int e;
int del_ptr(list *head,int i)
{list *ptr=head;
if(i<0)
{
return 0;
}
int j;
for( j=1;j<i&&ptr->next!=NULL;j++)
{
ptr=ptr->next;
}
if(i!=j)
return 0;
else
{
list *top;
top=head;
if(ptr==head)//表头删除节点
{
head=head->next;
cout<<"已删除编号为"<<ptr->num<<"元素!值为:"<<ptr->elem<<endl;
e= ptr->elem;
}
else
{
while(top->next!=ptr)
top=top->next;
if(ptr->next==NULL)//表尾
{
top->next=NULL;
cout<<"已删除编号为"<<ptr->num<<"号元素!值为:"<<ptr->elem<<endl;
e= ptr->elem;
}
else//中间
{top->next=ptr->next;
cout<<"已删除编号为"<<ptr->num<<"号元素!值为:"<<ptr->elem<<endl;
e= ptr->elem;
}
}
}
delete []ptr;
return 1;
}
int main()
{
list *newnode,*pre,*deldd;
deldd = new list;
if(!deldd)
{
cout<<"error"<<endl;
exit(1);
}
cout<<"输入num";
cin>>deldd->num;
cout<<"输入元素";
cin>>deldd->elem;
pre=deldd;
for(int i=1;i<5;i++)
{
newnode=new list;
if(!deldd)
{
cout<<"error"<<endl;
exit(1);
}
cout<<"输入num";
cin>>newnode->num;
cout<<"输入元素";
cin>>newnode->elem;
newnode->next=NULL;
pre->next=newnode;
pre=pre->next;
}
pre=deldd;
del_ptr(pre,2);
cout<<"返回的e的值为"<<e<<endl;
pre=deldd;
while(pre!=NULL)
{
cout<<pre->num<<"_____"<<pre->elem<<endl;
deldd=pre;
pre=pre->next;
delete deldd;
}
system("pause");
}
楼主功能已实现!!