算法利用的是鏈表的頭插入法,結果是與插入次序正好顛倒
成都創(chuàng)新互聯(lián)公司是少有的成都網(wǎng)站建設、做網(wǎng)站、營銷型企業(yè)網(wǎng)站、小程序開發(fā)、手機APP,開發(fā)、制作、設計、賣鏈接、推廣優(yōu)化一站式服務網(wǎng)絡公司,從2013年成立,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評
//這是有表頭結點鏈表的逆置
if (head == NULL)//鏈表為空就退出
return;
struct node *p = head-next, *pnext = NULL;//p是鏈表當前結點,pnext指向p的后繼結點
head-next = NULL;//斷開表頭結點和后面鏈表結點的聯(lián)系
while (p != NULL)
{//如果后面鏈表中還有結點
pnext = p-next;//pnext暫存當前結點后繼結點的指針
p-next = head-next;//將后面鏈表的第一個結點插入在前面鏈表的頭部
head-next = p;
p = pnext;// p重新指向后面鏈表的第一結點
}
用數(shù)據(jù)結構中的單鏈表求逆置的編程:
#include"iostream"
using
namespace
std;
struct
node{
int
data;
node
*next;
};
node
*p=NULL;
void
ins(int
x)
//將輸入的數(shù)采用頭插法放入鏈表中
{
node
*q=new
node;
q-data=x;
q-next=p;
p=q;
}
void
rev(int
i)
//將鏈表逆置并輸出
{
node
*m;
//因為用了頭插法放入數(shù)據(jù)所以輸出的應與輸入的相同
int
x;
m=p;
p=NULL;
int
j;
while(m!=NULL)
{
node
*n=m-next;
m-next=p;
p=m;
m=n;
}
cout"逆置鏈表后的結果:";
for(j=0;ji;j++)
{
x=p-data;
coutx;
p=p-next;
}
}
void
main()
{
int
i;
int
a[4];
cout"please
inpute
data(4個數(shù)):\n";
for(i=0;i4;i++)
cina[i];
for(i=0;i4;i++)
ins(a[i]);
rev(i);
}
錯誤原因:
1)題目要求“建立長度為n的順序表”,這個是要動態(tài)申請內存的,不能使用預先定大小的char data[100];代替,因為加入元素個數(shù)大于100,這個大小已知的數(shù)組就會越界,這是錯誤一。
2)您代碼中輸入的變量m是順序表長度,而卻要輸入2*m的字符,雖然后面只放入了m個字符給a數(shù)組,但是與題目要求不符合,這是錯誤二。
附加:程序代碼不精簡,不需要用鏈表申請釋放內存之類的,造成不少冗余代碼,這個不算是錯誤問題。
1)初始化指針p和q,分別指向鏈表中相鄰的兩個元素;
2)當p-next不為空時,做如下處理:
①若相鄰兩元素不相等時,p和q都向后推一步;
②否則,當相鄰元素相等時,刪除多余元素。
【算法源代碼】
void Delete_Equal(LinkList *L)
{ p=(*L)-next;q=p-next; /*p和q指向相鄰的兩個元素*/
while(p-next)
{ if(p-data!=q-data) /*若相鄰兩元素不相等時,p和q都向后推一步*/
{ p=p-next; q=p-next; }
else
{ while(q-data==p-data) /*當相鄰元素相等時刪除多余元素*/
{ r=q;
q=q-next;
free(r);
}
p-next=q;p=q;q=p-next;
}/*else*/
}/*while*/
}/*Delete_Equal */
試設計一個算法,對帶頭結點的單鏈表實現(xiàn)就地逆置。
【算法分析】
1)空表或長度為1的表,不做任何處理;
2)表長大于2時,做如下處理:
①首先將整個鏈表一分為二,即從鏈表的第一元素結點處斷開;
②逐個地把剩余鏈表的當前元素q插入到鏈表的頭部。
【算法源代碼】
void LinkList_reverse(LinkList L)
{ if(!L-next||!L-next-next) return;
p=L-next; q=p-next; s=q-next; p-next=NULL; /*從鏈表的第一元素結點處斷開*/
while(s-next)
{q-next=p;p=q;
q=s;s=s-next; /*把L的元素逐個插入新表表頭*/
}
q-next=p;s-next=q;L-next=s;
}/*LinkList_reverse*/
請問你的隊列和棧數(shù)據(jù)結構實現(xiàn)了沒?如果實現(xiàn)了就只看main方法吧
//MyStack.java
import java.util.LinkedList;
public class MyStack {
LinkedList linkList = new LinkedListObject();
public void push(Object object) {
linkList.addFirst(object);
}
public boolean isEmpty() {
return linkList.isEmpty();
}
public Object pop() {
if (!linkList.isEmpty())
return linkList.removeFirst();
return "棧內無元素";
}
}
//MyQueue.java
public class MyQueue {
LinkedList linkedList = new LinkedList();
public void put(Object o){
linkedList.addLast(o);
}
public Object get(){
if(!linkedList.isEmpty())
return linkedList.removeFirst();
return "";
}
public boolean isEmpty(){
return linkedList.isEmpty();
}
}
//test.java
public class test{
public static void main(String[] args) {
MyStack ms = new MyStack();
MyQueue mq = new MyQueue();
mq.put(1);
mq.put(2);
mq.put(3);
while(!mq.isEmpty()){
ms.push(mq.get());
}
while(!ms.isEmpty()){
mq.put(ms.pop());
}
while(!mq.isEmpty()){
System.out.print(mq.get());
}
}
}
程序輸入是1 2 3,輸出是3 2 1
本文名稱:數(shù)據(jù)結構java逆置代碼 數(shù)據(jù)結構java逆置代碼是什么
轉載注明:http://muchs.cn/article20/dossijo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、App開發(fā)、網(wǎng)站制作、標簽優(yōu)化、企業(yè)建站、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)