㈠ 刪除線性表中第i個數據元素
#include"stdio.h"
#include"malloc.h"
#definenull0
structlnode{
intdata;
structlnode*next;
};
intmain()
{
intx,y,i=1,n,d;
charyesorno;
structlnode*head,*p,*q,*r;
head=null;
q=null;
head=(structlnode*)malloc(sizeof(structlnode));
head->next=null;
printf("請您輸入一列正整數,並按0結束輸入: ");
scanf("%d",&d);
while(d>0)
{
p=(structlnode*)malloc(sizeof(structlnode));
p->data=d;
p->next=null;
if(head->next==null)head->next=p;
elseq->next=p;
q=p;
scanf("%d",&d);
}
printf("您輸入的鏈表為:");
q=head;
while(q->next!=null)//輸出鏈表
{
printf("%d",q->next->data);
q=q->next;
}
printf(" ");
//2、 在線性表中值為弊信喊x的元素前插入一個值為y的數據元素。若值為x的結點不存在,則將y插在表尾。
printf("請輸入x和y的值,並用空格隔開:");
scanf("%d%d",&x,&y);
r=(structlnode*)malloc(sizeof(structlnode));
r->data=y;
r->next=null;
q=head;
while(q->next!=null&&q->next->租野data!=x)q=q->next;
r->next=q->next;
q->next=r;
q=head;
printf("插入數據y後的鏈表為:");
while(q->next!=null)//輸出鏈表
{
printf("%d",q->next->坦旦data);
q=q->next;
}
printf(" ");
//3、刪除線性表中第i個數據元素。
printf("您要刪除的元素是第幾位: ");
scanf("%d",&n);
q=head;
i=1;//初始化i=1
while(i!=n)
{
if(q->next==null)break;
q=q->next;
i++;
}
if(q->next)
{
r=q->next;//被刪的是r
q->next=r->next;
free(r);
}
q=head;
while(q->next!=null)//輸出鏈表
{
printf("%d",q->next->data);
q=q->next;
}
printf(" ");
}
㈡ 怎樣操作可以刪除線性表中的一個元素呢
問題出現在查找效率上
鏈表最常用的操作是在末尾插入節點和刪除尾節點
在尾巴插入 刪除操作:
都需要知道他的前導 而單鏈表要查找到最有一個元素需要遍歷全部鏈表
雙鏈表直接可以查到前導
最常用的操作實在最後一個元素之後插入一個元素和刪除第一個元素
刪除頭結點 需要頭指針 或者只用一個->next域就能查到 速度就快了
在有第二個條件 刪除最後一個元素 有尾指針就最好了 可以直接找到尾巴元素 同時他還是循環鏈表 所以正好他的->next就是頭結點
ok?
㈢ 數據結構 線性表演算法 實現怎麼刪除最後一個元素
線性表有兩種,如果歷啟是順序存儲結構,只需l->length--即可;
如果是鏈式存儲結構,則先找到最後一個節點
typedef struct node
{
int data;
struct node *next;
}*LinkList,Node;
……
void main()
{
LinkList L;
Node *p,*q;
p=L;
q=L;
while(p->next!=NULL)
{
q=p;
p=p->next;
}
if(p!=q) /*若相等腔凱,則肢圓如表示為空鏈表*/
{
q->next=NULL;
free(p);
}
}
㈣ 線性表中刪除某些元素演算法
Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{
if((i<吵轎數1)||i>L.length)) return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;//表尾元升首帆枯素的位置
for(++p;p<=q;++p) *(p-1)=*p;
--L.length;
return OK;
}//ListDelete_Sq
㈤ 設計演算法刪除線性表中的多餘元素
Node友和*p=head;
while(p->next!=NULL){
inta=p->data;
intb=p->next.data;
if(a==b){
p->next=p->next->next;
}
p=p->next;
是不核告判是就行了。改改。
㈥ 在順序線性表中刪除元素
樓主糾結的其實就是一個問題:指針運算到底是怎麼計算的?其實這取決於指針的類型。舉個例子,int *p,則p=p+1表示將指針p移動1個int長度(也就是4個位元組);如果是char *p,則p=p+1表示指針p移動一個char長度(也就是1個位元組)。而到底移動多少個位元組,是由編譯器通過指針的類型來決定的。所以你的問題中,L.elem+L.length-1自然就是移動到最後一個元素了。
有問題歡迎追問!
㈦ 線性表刪除元素
首迅穗察先,你要知道數組的存儲方式,數組的下標是從0開始的,比如要往數組a[3]數組中存儲1,2,3,3個數,他是這樣放的,a[0]=1,a[1]=2,a[2]=3,數組下標只到2,而不是3, i 是我們要刪除的元素的位置(表面上我們認為的位置),在數組中的實際位置的下標則是[i-1],所以,是p=&(L.elem[i-1])而不是p=&(L.elem[i]);
其次,q=L.elem+L.length-1表示的是族纖表尾元素的位置,L.elem是數組名也就是數組的首地址,如果想訪問某個元素,只需在後邊加上相應的偏移量,L.length是數畝茄組的長度,那麼最後一個元素在數組中的位置就是[L.length-1],那麼,L.elem+L.length-1就表示在數組首地址向後偏移L.length-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;
}
㈨ 數據結構 順序存儲 線性表刪除元素的簡單問題
Status
DeleteK(SqList
&a,int
i,int
k)//刪除線性表a中第i個元遲仿素起的k個元素
{
int
count;
//首先你要定義個變數啊,這里我假設數組下標從0開始哈
if(i<1||k<0||i+k-1>a.length)
return
INFEASIBLE;
/*一共碼老纖刪除K個元素,所以需要移動元素a.length-i-k+1次*/
for
(count
=
0
;
count
<
a.length-i-k+1;
count++)
{
a.elem[
i-1+count]
=
a.elem[i-1+count+k];
}
a.length-=k;
return
OK;
}//DeleteK 其實好像和你的方法是一樣的,只是寫法有所不同,我覺得含漏我的寫法更容易直接看出編程的意圖.